- Refactored code to make testing simpler

Signed-off-by: Adrien Thebo <adr...@puppetlabs.com>
---
Local-branch: tickets/next/5135
 lib/facter/physicalprocessorcount.rb     |   14 ++++++----
 spec/unit/physicalprocessorcount_spec.rb |   40 ++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 6 deletions(-)
 create mode 100644 spec/unit/physicalprocessorcount_spec.rb

diff --git a/lib/facter/physicalprocessorcount.rb 
b/lib/facter/physicalprocessorcount.rb
index 6772ccc..9c6a728 100644
--- a/lib/facter/physicalprocessorcount.rb
+++ b/lib/facter/physicalprocessorcount.rb
@@ -28,9 +28,11 @@ Facter.add('physicalprocessorcount') do
       lookup_pattern = "#{sysfs_cpu_directory}" +
         "/cpu*/topology/physical_package_id"
 
-      Facter::Util::Resolution.exec(
-        "cat #{lookup_pattern}"
-      ).scan(/\d+/).uniq.size
+      ids = Dir.glob(lookup_pattern).each { |f| 
Facter::Util::Resolution.exec("cat #{f}")}
+
+      ids = ids.join if ids.class == Array
+      ids.scan(/\d+/).uniq.size
+
     else
       #
       # Try to count number of CPUs using the proc file system next ...
@@ -38,9 +40,9 @@ Facter.add('physicalprocessorcount') do
       # We assume that /proc/cpuinfo has what we need and is so then we need
       # to make sure that we only count unique entries ...
       #
-      Facter::Util::Resolution.exec(
-        "grep 'physical.\\+:' /proc/cpuinfo"
-      ).scan(/\d+/).uniq.size
+      str = Facter::Util::Resolution.exec("grep 'physical.\\+:' /proc/cpuinfo")
+
+      if not str.nil? then str.scan(/\d+/).uniq.size; end
     end
   end
 end
diff --git a/spec/unit/physicalprocessorcount_spec.rb 
b/spec/unit/physicalprocessorcount_spec.rb
new file mode 100644
index 0000000..260788b
--- /dev/null
+++ b/spec/unit/physicalprocessorcount_spec.rb
@@ -0,0 +1,40 @@
+#!/usr/bin/env ruby
+
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+require 'facter'
+
+describe "Physical processor count facts" do
+    before do
+        Facter.loadfacts
+    end
+    before do
+        Facter.clear
+    end
+    it "should return one physical CPU" do
+        Facter.fact(:kernel).stubs(:value).returns("Linux")
+        File.stubs(:exists?).with('/sys/devices/system/cpu').returns(true)
+        
Dir.stubs(:glob).with("/sys/devices/system/cpu/cpu*/topology/physical_package_id").returns("/sys/devices/system/cpu/cpu0/topology/physical_package_id")
+        Facter::Util::Resolution.stubs(:exec).with("cat 
/sys/devices/system/cpu/cpu0/topology/physical_package_id").returns("0")
+
+        Facter.fact(:physicalprocessorcount).value.should == 1
+    end
+
+    it "should return four physical CPUs" do
+        Facter.fact(:kernel).stubs(:value).returns("Linux")
+        File.stubs(:exists?).with('/sys/devices/system/cpu').returns(true)
+        
Dir.stubs(:glob).with("/sys/devices/system/cpu/cpu*/topology/physical_package_id").returns(%w{
+          /sys/devices/system/cpu/cpu0/topology/physical_package_id
+          /sys/devices/system/cpu/cpu1/topology/physical_package_id
+          /sys/devices/system/cpu/cpu2/topology/physical_package_id
+          /sys/devices/system/cpu/cpu3/topology/physical_package_id
+        })
+
+        Facter::Util::Resolution.stubs(:exec).with("cat 
/sys/devices/system/cpu/cpu0/topology/physical_package_id").returns("0")
+        Facter::Util::Resolution.stubs(:exec).with("cat 
/sys/devices/system/cpu/cpu1/topology/physical_package_id").returns("1")
+        Facter::Util::Resolution.stubs(:exec).with("cat 
/sys/devices/system/cpu/cpu2/topology/physical_package_id").returns("2")
+        Facter::Util::Resolution.stubs(:exec).with("cat 
/sys/devices/system/cpu/cpu3/topology/physical_package_id").returns("3")
+
+        Facter.fact(:physicalprocessorcount).value.should == 4
+    end
+end
-- 
1.7.4.1

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to puppet-dev@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to