With a change this big, I'd have thought you'd have more to say in the
commit message about why it's necessary and why #6515 and #2945 are
combined into a single commit when the tickets aren't marked as
duplicates of each other. ;)

There are a lot of introduced trailing whitespace, and hard-tabs in the
changes outside of the fixtures that should be cleaned up (especially
since one of the areas with hard-tabs really messes with the
indentation).

-- 
Jacob Helwig

On Thu, 12 May 2011 18:20:10 -0700, Michael Kincaid wrote:
> 
> Signed-off-by: Michael Kincaid <[email protected]>
> ---
> Local-branch: ticket/next/6515
>  lib/facter/processor.rb              |  135 ++++++++++++--------------
>  lib/facter/util/processor.rb         |   88 +++++++++++++++++
>  spec/fixtures/cpuinfo/amd64dual      |   57 +++++++++++
>  spec/fixtures/cpuinfo/amd64quad      |   79 +++++++++++++++
>  spec/fixtures/cpuinfo/amd64solo      |   23 +++++
>  spec/fixtures/cpuinfo/amd64tri       |   86 +++++++++++++++++
>  spec/fixtures/cpuinfo/bbg3-armel     |   12 +++
>  spec/fixtures/cpuinfo/beaglexm-armel |   12 +++
>  spec/fixtures/cpuinfo/panda-armel    |   17 ++++
>  spec/fixtures/cpuinfo/ppc64          |   19 ++++
>  spec/fixtures/cpuinfo/sparc          |   10 ++
>  spec/unit/processor_spec.rb          |  174 
> ++++++++++++++++++++++++++++++++++
>  spec/unit/util/processor_spec.rb     |   62 ++++++++++++
>  13 files changed, 702 insertions(+), 72 deletions(-)
>  create mode 100644 lib/facter/util/processor.rb
>  create mode 100644 spec/fixtures/cpuinfo/amd64dual
>  create mode 100644 spec/fixtures/cpuinfo/amd64quad
>  create mode 100644 spec/fixtures/cpuinfo/amd64solo
>  create mode 100644 spec/fixtures/cpuinfo/amd64tri
>  create mode 100644 spec/fixtures/cpuinfo/bbg3-armel
>  create mode 100644 spec/fixtures/cpuinfo/beaglexm-armel
>  create mode 100644 spec/fixtures/cpuinfo/panda-armel
>  create mode 100644 spec/fixtures/cpuinfo/ppc64
>  create mode 100644 spec/fixtures/cpuinfo/sparc
>  create mode 100755 spec/unit/processor_spec.rb
>  create mode 100755 spec/unit/util/processor_spec.rb
> 
> diff --git a/lib/facter/processor.rb b/lib/facter/processor.rb
> index ec196b2..df4e9af 100644
> --- a/lib/facter/processor.rb
> +++ b/lib/facter/processor.rb
> @@ -19,88 +19,79 @@
>  #
>  
>  require 'thread'
> +require 'facter/util/processor'
>  
> -if ["Linux", "GNU/kFreeBSD"].include? Facter.value(:kernel)
> -    processor_num = -1
> -    processor_list = []
> -    Thread::exclusive do
> -        File.readlines("/proc/cpuinfo").each do |l|
> -            if l =~ /processor\s+:\s+(\d+)/
> -                processor_num = $1.to_i
> -            elsif l =~ /model name\s+:\s+(.*)\s*$/
> -                processor_list[processor_num] = $1 unless processor_num == -1
> -                processor_num = -1
> -            elsif l =~ /processor\s+(\d+):\s+(.*)/
> -                processor_num = $1.to_i
> -                processor_list[processor_num] = $2 unless processor_num == -1
> -            end
> -        end
> +Facter.add("ProcessorCount") do
> +  confine :kernel => [ :linux, :"gnu/kfreebsd" ]
> +  setcode do
> +    processor_list = Facter::Util::Processor.enum_cpuinfo
> +    
> +    ## If this returned nothing, then don't resolve the fact
> +    if processor_list.length != 0
> +      processor_list.length.to_s
>      end
> +  end
> +end
>  
> -    Facter.add("ProcessorCount") do
> -        confine :kernel => [ :linux, :"gnu/kfreebsd" ]
> -        setcode do
> -            processor_list.length.to_s
> -        end
> -    end
> +Facter.add("ProcessorCount") do
> +     confine :kernel => [ :linux, :"gnu/kfreebsd" ]
> +     setcode do
> +## The method above is preferable since it provides the description of the 
> CPU as well
> +## but if that returned 0, then we enumerate sysfs
> +                     sysfs_cpu_directory = '/sys/devices/system/cpu'
> +                     if File.exists?(sysfs_cpu_directory)
> +                             lookup_pattern = "#{sysfs_cpu_directory}" + 
> "/cpu[0-9]*"
> +                             cpuCount = Dir.glob(lookup_pattern).length
> +                             cpuCount.to_s
> +                     end
> +     end
> +end
>  
> -    processor_list.each_with_index do |desc, i|
> -        Facter.add("Processor#{i}") do
> -            confine :kernel => [ :linux, :"gnu/kfreebsd" ]
> -            setcode do
> -                desc
> -            end
> -        end
> -    end
> +Facter.add("ProcessorCount") do
> +  confine :kernel => :aix
> +  setcode do
> +    processor_list = Facter::Util::Processor.enum_lsdev
> +        
> +    processor_list.length.to_s
> +  end
>  end
>  
> -if Facter.value(:kernel) == "AIX"
> -    processor_num = -1
> -    processor_list = {}
> -    Thread::exclusive do
> -        procs = Facter::Util::Resolution.exec('lsdev -Cc processor')
> -        procs.each do |proc|
> -            if proc =~ /^proc(\d+)/
> -                processor_num = $1.to_i
> -                # Not retrieving the frequency since AIX 4.3.3 doesn't 
> support the
> -                # attribute and some people still use the OS.
> -                proctype = Facter::Util::Resolution.exec('lsattr -El proc0 
> -a type')
> -                if proctype =~ /^type\s+(\S+)\s+/
> -                    processor_list["processor#{processor_num}"] = $1
> -                end
> -            end
> -        end
> -    end
>  
> -    Facter.add("ProcessorCount") do
> -        confine :kernel => :aix
> -        setcode do
> -            processor_list.length.to_s
> -        end
> -    end
> +Facter.add("ProcessorCount") do
> +     confine :kernel => :openbsd
> +     setcode do
> +             Facter::Util::Resolution.exec("sysctl hw.ncpu | cut -d'=' -f2")
> +     end
> +end
>  
> -    processor_list.each do |proc, desc|
> -        Facter.add(proc) do
> -            confine :kernel => :aix
> -            setcode do
> -                desc
> -            end
> -        end
> -    end
> +Facter.add("ProcessorCount") do
> +     confine :kernel => :Darwin
> +     setcode do
> +             Facter::Util::Resolution.exec("sysctl hw.ncpu | cut -d' ' -f2")
> +     end
>  end
>  
> -if Facter.value(:kernel) == "OpenBSD"
> -    Facter.add("Processor") do
> -        confine :kernel => :openbsd
> -        setcode do
> -            Facter::Util::Resolution.exec("uname -p")
> -        end
> -    end
> +## We have to enumerate these outside a Facter.add block to get the 
> processorN descriptions iteratively
> +## (but we need them inside the Facter.add block above for tests on 
> processorcount to work)
> +processor_list = Facter::Util::Processor.enum_cpuinfo
> +processor_list_aix = Facter::Util::Processor.enum_lsdev
>  
> -    Facter.add("ProcessorCount") do
> -        confine :kernel => :openbsd
> -        setcode do
> -            Facter::Util::Resolution.exec("sysctl hw.ncpu | cut -d'=' -f2")
> -        end
> +if processor_list.length != 0
> +  processor_list.each_with_index do |desc, i|
> +    Facter.add("Processor#{i}") do
> +      confine :kernel => [ :linux, :"gnu/kfreebsd" ]
> +      setcode do
> +        desc
> +      end
> +    end
> +  end
> +elsif processor_list_aix.length != 0
> +  processor_list_aix.each_with_index do |desc, i|
> +    Facter.add("Processor#{i}") do
> +      confine :kernel => [ :aix ]
> +      setcode do
> +        desc
> +      end
>      end
> +  end
>  end
> diff --git a/lib/facter/util/processor.rb b/lib/facter/util/processor.rb
> new file mode 100644
> index 0000000..d74c1c8
> --- /dev/null
> +++ b/lib/facter/util/processor.rb
> @@ -0,0 +1,88 @@
> +module Facter::Util::Processor
> +  def self.enum_cpuinfo
> +    processor_num = -1
> +    processor_list = []
> +    cpuinfo = "/proc/cpuinfo"
> +
> +    if File.exists?(cpuinfo)
> +      model = Facter.value(:architecture)
> +      case model
> +      when "x86_64", "amd64", "i386", /parisc/, "hppa", "ia64"
> +        Thread::exclusive do
> +          File.readlines(cpuinfo).each do |l|
> +            if l =~ /processor\s+:\s+(\d+)/
> +              processor_num = $1.to_i
> +            elsif l =~ /model name\s+:\s+(.*)\s*$/
> +              processor_list[processor_num] = $1 unless processor_num == -1
> +              processor_num = -1
> +            elsif l =~ /processor\s+(\d+):\s+(.*)/
> +              processor_num = $1.to_i
> +              processor_list[processor_num] = $2 unless processor_num == -1
> +            end
> +          end
> +        end
> +       
> +      when "ppc64"
> +        Thread::exclusive do
> +          File.readlines(cpuinfo).each do |l|
> +            if l =~ /processor\s+:\s+(\d+)/
> +              processor_num = $1.to_i        
> +            elsif l =~ /cpu\s+:\s+(.*)\s*$/
> +              processor_list[processor_num] = $1 unless processor_num == -1
> +              processor_num = -1
> +            end
> +          end
> +        end
> +          
> +      when /arm/
> +        Thread::exclusive do
> +          File.readlines(cpuinfo).each do |l|
> +            if l =~ /Processor\s+:\s+(.+)/
> +              processor_num += 1
> +              processor_list[processor_num] = $1.chomp
> +            elsif l =~ /processor\s+:\s+(\d+)\s*$/
> +              proc_num = $1.to_i
> +              if proc_num != 0
> +                processor_num += 1
> +                processor_list[processor_num] = 
> processor_list[processor_num-1]
> +              end
> +            end
> +          end
> +        end
> +
> +      when /sparc/
> +        Thread::exclusive do
> +          File.readlines(cpuinfo).each do |l|
> +            if l =~ /cpu\s+:\s+(.*)\s*$/
> +              processor_num += 1
> +              processor_list[processor_num] = $1
> +            end
> +          end
> +        end
> +      end
> +    end
> +    processor_list
> +  end
> +  
> +  def self.enum_lsdev
> +    processor_num = -1
> +    processor_list = {}
> +    Thread::exclusive do
> +      procs = Facter::Util::Resolution.exec('lsdev -Cc processor')
> +      if procs
> +        procs.each do |proc|
> +          if proc =~ /^proc(\d+)/
> +            processor_num = $1.to_i
> +            # Not retrieving the frequency since AIX 4.3.3 doesn't support 
> the
> +            # attribute and some people still use the OS.
> +            proctype = Facter::Util::Resolution.exec('lsattr -El proc0 -a 
> type')
> +            if proctype =~ /^type\s+(\S+)\s+/
> +              processor_list[processor_num] = $1
> +            end
> +          end
> +        end
> +      end
> +    end
> +    processor_list
> +  end
> +end
> \ No newline at end of file
> diff --git a/spec/fixtures/cpuinfo/amd64dual b/spec/fixtures/cpuinfo/amd64dual
> new file mode 100644
> index 0000000..101e5b5
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/amd64dual
> @@ -0,0 +1,57 @@
> +processor    : 0
> +vendor_id    : GenuineIntel
> +cpu family   : 6
> +model                : 23
> +model name   : Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz
> +stepping     : 10
> +cpu MHz              : 689.302
> +cache size   : 6144 KB
> +physical id  : 0
> +siblings     : 2
> +core id              : 0
> +cpu cores    : 2
> +apicid               : 0
> +initial apicid       : 0
> +fdiv_bug     : no
> +hlt_bug              : no
> +f00f_bug     : no
> +coma_bug     : no
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov 
> pat pse36 clflush mmx fxsr sse sse2 ht constant_tsc pni ssse3
> +bogomips     : 1378.60
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 36 bits physical, 48 bits virtual
> +power management:
> +
> +processor    : 1
> +vendor_id    : GenuineIntel
> +cpu family   : 6
> +model                : 23
> +model name   : Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz
> +stepping     : 10
> +cpu MHz              : 689.302
> +cache size   : 6144 KB
> +physical id  : 0
> +siblings     : 2
> +core id              : 1
> +cpu cores    : 2
> +apicid               : 1
> +initial apicid       : 1
> +fdiv_bug     : no
> +hlt_bug              : no
> +f00f_bug     : no
> +coma_bug     : no
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov 
> pat pse36 clflush mmx fxsr sse sse2 ht constant_tsc pni ssse3
> +bogomips     : 1687.45
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 36 bits physical, 48 bits virtual
> +power management:
> diff --git a/spec/fixtures/cpuinfo/amd64quad b/spec/fixtures/cpuinfo/amd64quad
> new file mode 100644
> index 0000000..3675476
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/amd64quad
> @@ -0,0 +1,79 @@
> +processor    : 0
> +vendor_id    : AuthenticAMD
> +cpu family   : 16
> +model                : 4
> +model name   : Quad-Core AMD Opteron(tm) Processor 2374 HE
> +stepping     : 2
> +cpu MHz              : 1386667.908
> +cache size   : 512 KB
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse 
> sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc rep_good 
> nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy extapic cr8_legacy abm sse4a 
> misalignsse 3dnowprefetch
> +bogomips     : 4400.17
> +TLB size     : 1024 4K pages
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 48 bits physical, 48 bits virtual
> +power management: ts ttp tm stc 100mhzsteps hwpstate
> +
> +processor    : 1
> +vendor_id    : AuthenticAMD
> +cpu family   : 16
> +model                : 4
> +model name   : Quad-Core AMD Opteron(tm) Processor 2374 HE
> +stepping     : 2
> +cpu MHz              : 1386667.908
> +cache size   : 512 KB
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse 
> sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc rep_good 
> nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy extapic cr8_legacy abm sse4a 
> misalignsse 3dnowprefetch
> +bogomips     : 4400.17
> +TLB size     : 1024 4K pages
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 48 bits physical, 48 bits virtual
> +power management: ts ttp tm stc 100mhzsteps hwpstate
> +
> +processor    : 2
> +vendor_id    : AuthenticAMD
> +cpu family   : 16
> +model                : 4
> +model name   : Quad-Core AMD Opteron(tm) Processor 2374 HE
> +stepping     : 2
> +cpu MHz              : 1386667.908
> +cache size   : 512 KB
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse 
> sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc rep_good 
> nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy extapic cr8_legacy abm sse4a 
> misalignsse 3dnowprefetch
> +bogomips     : 4400.17
> +TLB size     : 1024 4K pages
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 48 bits physical, 48 bits virtual
> +power management: ts ttp tm stc 100mhzsteps hwpstate
> +
> +processor    : 3
> +vendor_id    : AuthenticAMD
> +cpu family   : 16
> +model                : 4
> +model name   : Quad-Core AMD Opteron(tm) Processor 2374 HE
> +stepping     : 2
> +cpu MHz              : 1386667.908
> +cache size   : 512 KB
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse 
> sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc rep_good 
> nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy extapic cr8_legacy abm sse4a 
> misalignsse 3dnowprefetch
> +bogomips     : 4400.17
> +TLB size     : 1024 4K pages
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 48 bits physical, 48 bits virtual
> +power management: ts ttp tm stc 100mhzsteps hwpstate
> diff --git a/spec/fixtures/cpuinfo/amd64solo b/spec/fixtures/cpuinfo/amd64solo
> new file mode 100644
> index 0000000..09c3bb4
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/amd64solo
> @@ -0,0 +1,23 @@
> +processor    : 0
> +vendor_id    : GenuineIntel
> +cpu family   : 6
> +model                : 23
> +model name   : Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz
> +stepping     : 10
> +cpu MHz              : 600.825
> +cache size   : 6144 KB
> +fdiv_bug     : no
> +hlt_bug              : no
> +f00f_bug     : no
> +coma_bug     : no
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov 
> pat pse36 clflush mmx fxsr sse sse2 constant_tsc up pni monitor ssse3
> +bogomips     : 1201.65
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 36 bits physical, 48 bits virtual
> +power management:
> +
> diff --git a/spec/fixtures/cpuinfo/amd64tri b/spec/fixtures/cpuinfo/amd64tri
> new file mode 100644
> index 0000000..993c49c
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/amd64tri
> @@ -0,0 +1,86 @@
> +processor    : 0
> +vendor_id    : GenuineIntel
> +cpu family   : 6
> +model                : 23
> +model name   : Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz
> +stepping     : 10
> +cpu MHz              : 910.177
> +cache size   : 6144 KB
> +physical id  : 0
> +siblings     : 3
> +core id              : 0
> +cpu cores    : 3
> +apicid               : 0
> +initial apicid       : 0
> +fdiv_bug     : no
> +hlt_bug              : no
> +f00f_bug     : no
> +coma_bug     : no
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov 
> pat pse36 clflush mmx fxsr sse sse2 ht constant_tsc pni ssse3
> +bogomips     : 1820.35
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 36 bits physical, 48 bits virtual
> +power management:
> +
> +processor    : 1
> +vendor_id    : GenuineIntel
> +cpu family   : 6
> +model                : 23
> +model name   : Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz
> +stepping     : 10
> +cpu MHz              : 910.177
> +cache size   : 6144 KB
> +physical id  : 0
> +siblings     : 3
> +core id              : 1
> +cpu cores    : 3
> +apicid               : 1
> +initial apicid       : 1
> +fdiv_bug     : no
> +hlt_bug              : no
> +f00f_bug     : no
> +coma_bug     : no
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov 
> pat pse36 clflush mmx fxsr sse sse2 ht constant_tsc pni ssse3
> +bogomips     : 1875.49
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 36 bits physical, 48 bits virtual
> +power management:
> +
> +processor    : 2
> +vendor_id    : GenuineIntel
> +cpu family   : 6
> +model                : 23
> +model name   : Intel(R) Core(TM)2 Duo CPU     P8700  @ 2.53GHz
> +stepping     : 10
> +cpu MHz              : 910.177
> +cache size   : 6144 KB
> +physical id  : 0
> +siblings     : 3
> +core id              : 2
> +cpu cores    : 3
> +apicid               : 2
> +initial apicid       : 2
> +fdiv_bug     : no
> +hlt_bug              : no
> +f00f_bug     : no
> +coma_bug     : no
> +fpu          : yes
> +fpu_exception        : yes
> +cpuid level  : 5
> +wp           : yes
> +flags                : fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov 
> pat pse36 clflush mmx fxsr sse sse2 ht constant_tsc pni ssse3
> +bogomips     : 1523.26
> +clflush size : 64
> +cache_alignment      : 64
> +address sizes        : 36 bits physical, 48 bits virtual
> +power management:
> diff --git a/spec/fixtures/cpuinfo/bbg3-armel 
> b/spec/fixtures/cpuinfo/bbg3-armel
> new file mode 100644
> index 0000000..6dd9d49
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/bbg3-armel
> @@ -0,0 +1,12 @@
> +Processor    : ARMv7 Processor rev 5 (v7l)
> +BogoMIPS     : 799.53
> +Features     : swp half thumb fastmult vfp edsp thumbee neon vfpv3 
> +CPU implementer      : 0x41
> +CPU architecture: 7
> +CPU variant  : 0x2
> +CPU part     : 0xc08
> +CPU revision : 5
> +
> +Hardware     : Freescale MX51 Babbage Board
> +Revision     : 51130
> +Serial               : 0000000000000000
> diff --git a/spec/fixtures/cpuinfo/beaglexm-armel 
> b/spec/fixtures/cpuinfo/beaglexm-armel
> new file mode 100644
> index 0000000..1de8986
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/beaglexm-armel
> @@ -0,0 +1,12 @@
> +Processor    : ARMv7 Processor rev 2 (v7l)
> +BogoMIPS     : 506.27
> +Features     : swp half thumb fastmult vfp edsp neon vfpv3 
> +CPU implementer      : 0x41
> +CPU architecture: 7
> +CPU variant  : 0x3
> +CPU part     : 0xc08
> +CPU revision : 2
> +
> +Hardware     : OMAP3 Beagle Board
> +Revision     : 0020
> +Serial               : 0000000000000000
> diff --git a/spec/fixtures/cpuinfo/panda-armel 
> b/spec/fixtures/cpuinfo/panda-armel
> new file mode 100644
> index 0000000..18b21a7
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/panda-armel
> @@ -0,0 +1,17 @@
> +Processor    : ARMv7 Processor rev 2 (v7l)
> +processor    : 0
> +BogoMIPS     : 2013.45
> +
> +processor    : 1
> +BogoMIPS     : 1963.05
> +
> +Features     : swp half thumb fastmult vfp edsp thumbee neon vfpv3 
> +CPU implementer      : 0x41
> +CPU architecture: 7
> +CPU variant  : 0x1
> +CPU part     : 0xc09
> +CPU revision : 2
> +
> +Hardware     : OMAP4430 Panda Board
> +Revision     : 0020
> +Serial               : 0000000000000000
> diff --git a/spec/fixtures/cpuinfo/ppc64 b/spec/fixtures/cpuinfo/ppc64
> new file mode 100644
> index 0000000..4375a97
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/ppc64
> @@ -0,0 +1,19 @@
> +processor    : 0
> +cpu          : PPC970FX, altivec supported
> +clock                : 2000.000000MHz
> +revision     : 3.0 (pvr 003c 0300)
> +
> +processor    : 1
> +cpu          : PPC970FX, altivec supported
> +clock                : 2000.000000MHz
> +revision     : 3.0 (pvr 003c 0300)
> +
> +timebase     : 33333333
> +platform     : PowerMac
> +model                : RackMac3,1
> +machine              : RackMac3,1
> +motherboard  : RackMac3,1 MacRISC4 Power Macintosh 
> +detected as  : 339 (XServe G5)
> +pmac flags   : 00000000
> +L2 cache     : 512K unified
> +pmac-generation      : NewWorld
> diff --git a/spec/fixtures/cpuinfo/sparc b/spec/fixtures/cpuinfo/sparc
> new file mode 100644
> index 0000000..c186ac8
> --- /dev/null
> +++ b/spec/fixtures/cpuinfo/sparc
> @@ -0,0 +1,10 @@
> +cpu          : TI UltraSparc IIIi (Jalapeno)
> +fpu          : UltraSparc IIIi integrated FPU
> +prom         : OBP 4.16.2 2004/10/04 18:22
> +type         : sun4u
> +ncpus probed : 1
> +ncpus active : 1
> +D$ parity tl1        : 0
> +I$ parity tl1        : 0
> +Cpu0ClkTck   : 000000004fa1be00
> +MMU Type     : Cheetah+
> diff --git a/spec/unit/processor_spec.rb b/spec/unit/processor_spec.rb
> new file mode 100755
> index 0000000..571d01f
> --- /dev/null
> +++ b/spec/unit/processor_spec.rb
> @@ -0,0 +1,174 @@
> +#!/usr/bin/env ruby
> +
> +## This only tests the processorcount fact
> +## The processor0, processor1, ... facts can't be tested using the current 
> architecture
> +## because the fact iterates over them outside of Facter.add,
> +## and the testing stubs are only present inside the Facter.add block.
> +
> +$basedir = File.expand_path(File.dirname(__FILE__) + '/..')
> +require File.join($basedir, 'spec_helper')
> +
> +require 'facter'
> +
> +def cpuinfo_fixture(filename)
> +    cpuinfo = File.open(File.join($basedir, 'fixtures', 'cpuinfo', 
> filename)).readlines
> +end
> +
> +describe "Processor count fact" do
> +
> +     ## Will not autoload because processor.rb does not match fact name
> +
> +    before do
> +             Facter.loadfacts
> +     end
> +     
> +    after do
> +        Facter.clear
> +    end
> +
> +  it "should be 1 in SPARC fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("sparc")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("sparc"))
> +
> +    Facter.fact(:processorcount).value.should == "1"
> +  end
> +
> +  it "should be 2 in ppc64 fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("ppc64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("ppc64"))
> +
> +    Facter.fact(:processorcount).value.should == "2"
> +  end
> +
> +  it "should be 2 in panda-armel fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("arm")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("panda-armel"))
> +
> +    Facter.fact(:processorcount).value.should == "2"
> +  end
> +
> +  it "should be 1 in bbg3-armel fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("arm")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("bbg3-armel"))
> +
> +    Facter.fact(:processorcount).value.should == "1"
> +  end
> +
> +  it "should be 1 in beaglexm-armel fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("arm")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("beaglexm-armel"))
> +
> +    Facter.fact(:processorcount).value.should == "1"
> +  end
> +  
> +  it "should be 1 in amd64solo fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64solo"))
> +
> +    Facter.fact(:processorcount).value.should == "1"
> +  end
> +  
> +  it "should be 2 in amd64dual fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64dual"))
> +
> +    Facter.fact(:processorcount).value.should == "2"
> +  end
> +  
> +  it "should be 3 in amd64tri fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64tri"))
> +
> +    Facter.fact(:processorcount).value.should == "3"
> +  end
> +  
> +  it "should be 4 in amd64quad fixture on Linux" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")

> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64quad"))
> +
> +    Facter.fact(:processorcount).value.should == "4"
> +  end
> +
> +  it "should be 2 on dual-processor Darwin box" do
> +     Facter.fact(:kernel).stubs(:value).returns("Darwin")
> +    Facter::Util::Resolution.stubs(:exec).with("sysctl hw.ncpu | cut -d' ' 
> -f2").returns('2')
> +
> +    Facter.fact(:processorcount).value.should == "2"
> +  end
> +  
> +  it "should be 2 on dual-processor OpenBSD box" do
> +     Facter.fact(:kernel).stubs(:value).returns("OpenBSD")
> +    Facter::Util::Resolution.stubs(:exec).with("sysctl hw.ncpu | cut -d'=' 
> -f2").returns('2')
> +
> +    Facter.fact(:processorcount).value.should == "2"
> +  end
> +
> +  it "should be 6 on six-processor AIX box" do
> +     Facter.fact(:kernel).stubs(:value).returns("AIX")
> +    Facter::Util::Resolution.stubs(:exec).with("lsdev -Cc 
> processor").returns("proc0 Available 00-00 Processor\nproc2 Available 00-02 
> Processor\nproc4 Available 00-04 Processor\nproc6 Available 00-06 
> Processor\nproc8 Available 00-08 Processor\nproc10 Available 00-10 Processor")
> +    Facter::Util::Resolution.stubs(:exec).with("lsattr -El proc0 -a 
> type").returns("type PowerPC_POWER3 Processor type False")
> +
> +    Facter.fact(:processorcount).value.should == "6"
> +  end
> +  
> +  it "should be 2 via sysfs when cpu0 and cpu1 are present" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     File.stubs(:exists?).with('/sys/devices/system/cpu').returns(true)
> +     ## sysfs method is only used if cpuinfo method returned no processors
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    File.stubs(:readlines).with("/proc/cpuinfo").returns("")
> +     Dir.stubs(:glob).with("/sys/devices/system/cpu/cpu[0-9]*").returns(%w{
> +          /sys/devices/system/cpu/cpu0
> +          /sys/devices/system/cpu/cpu1
> +     })
> +
> +    Facter.fact(:processorcount).value.should == "2"
> +  end
> +
> +  it "should be 16 via sysfs when cpu0 through cpu15 are present" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     File.stubs(:exists?).with('/sys/devices/system/cpu').returns(true)
> +     ## sysfs method is only used if cpuinfo method returned no processors
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    File.stubs(:readlines).with("/proc/cpuinfo").returns("")
> +     Dir.stubs(:glob).with("/sys/devices/system/cpu/cpu[0-9]*").returns(%w{
> +          /sys/devices/system/cpu/cpu0
> +          /sys/devices/system/cpu/cpu1
> +          /sys/devices/system/cpu/cpu2
> +          /sys/devices/system/cpu/cpu3
> +          /sys/devices/system/cpu/cpu4
> +          /sys/devices/system/cpu/cpu5
> +          /sys/devices/system/cpu/cpu6
> +          /sys/devices/system/cpu/cpu7
> +          /sys/devices/system/cpu/cpu8
> +          /sys/devices/system/cpu/cpu9
> +          /sys/devices/system/cpu/cpu10
> +          /sys/devices/system/cpu/cpu11
> +          /sys/devices/system/cpu/cpu12
> +          /sys/devices/system/cpu/cpu13
> +          /sys/devices/system/cpu/cpu14
> +          /sys/devices/system/cpu/cpu15
> +     })
> +     
> +    Facter.fact(:processorcount).value.should == "16"
> +  end
> +
> +end
> diff --git a/spec/unit/util/processor_spec.rb 
> b/spec/unit/util/processor_spec.rb
> new file mode 100755
> index 0000000..1c8800d
> --- /dev/null
> +++ b/spec/unit/util/processor_spec.rb
> @@ -0,0 +1,62 @@
> +#!/usr/bin/env ruby
> +
> +$basedir = File.expand_path(File.dirname(__FILE__) + '/../..')
> +require File.join($basedir, 'spec_helper')
> +
> +require 'facter/util/processor'
> +
> +def cpuinfo_fixture(filename)
> +    cpuinfo = File.open(File.join($basedir, 'fixtures', 'cpuinfo', 
> filename)).readlines
> +end
> +
> +describe Facter::Util::Processor do
> +  it "should get the processor description from the amd64solo fixture" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64solo"))
> +    
> +    Facter::Util::Processor.enum_cpuinfo[0].should == "Intel(R) Core(TM)2 
> Duo CPU     P8700  @ 2.53GHz"
> +  end
> +
> +  it "should get the processor descriptions from the amd64dual fixture" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64dual"))
> +    
> +    Facter::Util::Processor.enum_cpuinfo[0].should == "Intel(R) Core(TM)2 
> Duo CPU     P8700  @ 2.53GHz"
> +    Facter::Util::Processor.enum_cpuinfo[1].should == "Intel(R) Core(TM)2 
> Duo CPU     P8700  @ 2.53GHz"
> +  end
> +  
> +  it "should get the processor descriptions from the amd64tri fixture" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64tri"))
> +    
> +    Facter::Util::Processor.enum_cpuinfo[0].should == "Intel(R) Core(TM)2 
> Duo CPU     P8700  @ 2.53GHz"
> +    Facter::Util::Processor.enum_cpuinfo[1].should == "Intel(R) Core(TM)2 
> Duo CPU     P8700  @ 2.53GHz"
> +    Facter::Util::Processor.enum_cpuinfo[2].should == "Intel(R) Core(TM)2 
> Duo CPU     P8700  @ 2.53GHz"
> +  end
> +  
> +  it "should get the processor descriptions from the amd64quad fixture" do
> +     Facter.fact(:kernel).stubs(:value).returns("Linux")
> +     Facter.fact(:architecture).stubs(:value).returns("amd64")
> +    File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
> +    
> File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture("amd64quad"))
> +    
> +    Facter::Util::Processor.enum_cpuinfo[0].should == "Quad-Core AMD 
> Opteron(tm) Processor 2374 HE"
> +    Facter::Util::Processor.enum_cpuinfo[1].should == "Quad-Core AMD 
> Opteron(tm) Processor 2374 HE"
> +    Facter::Util::Processor.enum_cpuinfo[2].should == "Quad-Core AMD 
> Opteron(tm) Processor 2374 HE"
> +    Facter::Util::Processor.enum_cpuinfo[3].should == "Quad-Core AMD 
> Opteron(tm) Processor 2374 HE"
> +  end
> +
> +  it "should get the processor type on AIX box" do
> +     Facter.fact(:kernel).stubs(:value).returns("AIX")
> +    Facter::Util::Resolution.stubs(:exec).with("lsdev -Cc 
> processor").returns("proc0 Available 00-00 Processor\nproc2 Available 00-02 
> Processor\nproc4 Available 00-04 Processor\nproc6 Available 00-06 
> Processor\nproc8 Available 00-08 Processor\nproc10 Available 00-10 Processor")
> +    Facter::Util::Resolution.stubs(:exec).with("lsattr -El proc0 -a 
> type").returns("type PowerPC_POWER3 Processor type False")
> +
> +    Facter::Util::Processor.enum_lsdev[0].should == "PowerPC_POWER3"
> +  end
> +end
> -- 
> 1.7.4.1
> 

Attachment: signature.asc
Description: Digital signature

Reply via email to