Splitting dmi output on the string "/^Handle/" didn't work, and
caused the function to match the wrong key if it was found more
than once.
The intended behaviour of the function is restored by splitting
the dmi output on the regex /^Handle/.

Signed-off-by: Marc Fournier <[email protected]>
---
 lib/facter/util/manufacturer.rb |    2 +-
 spec/unit/util/manufacturer.rb  |   40 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/lib/facter/util/manufacturer.rb b/lib/facter/util/manufacturer.rb
index baf24bc..61d617a 100644
--- a/lib/facter/util/manufacturer.rb
+++ b/lib/facter/util/manufacturer.rb
@@ -28,7 +28,7 @@ module Facter::Manufacturer
     end
 
     def self.dmi_find_system_info(name)
-        splitstr=  Facter.value(:kernel) ==  'SunOS' ? "ID    SIZE TYPE" : 
"/^Handle/"
+        splitstr=  Facter.value(:kernel) ==  'SunOS' ? "ID    SIZE TYPE" : 
/^Handle/
         output = self.get_dmi_table()
         return if output.nil?
         name.each_pair do |key,v|
diff --git a/spec/unit/util/manufacturer.rb b/spec/unit/util/manufacturer.rb
index 11d207d..f9ec81f 100644
--- a/spec/unit/util/manufacturer.rb
+++ b/spec/unit/util/manufacturer.rb
@@ -45,4 +45,42 @@ Handle 0x001F
         Facter::Manufacturer.dmi_find_system_info(query)
         Facter.value(:ramslots).should == "2"
     end
-end
\ No newline at end of file
+
+    it "should match the key in the defined section and not the first one 
found" do
+        dmidecode_output = <<-eos
+Handle 0x000C, DMI type 7, 19 bytes
+Cache Information
+        Socket Designation: Internal L2 Cache
+        Configuration: Enabled, Socketed, Level 2
+        Operational Mode: Write Back
+        Location: Internal
+        Installed Size: 4096 KB
+        Maximum Size: 4096 KB
+        Supported SRAM Types:
+                Burst
+        Installed SRAM Type: Burst
+        Speed: Unknown
+        Error Correction Type: Single-bit ECC
+        System Type: Unified
+        Associativity: 8-way Set-associative
+
+Handle 0x1000, DMI type 16, 15 bytes
+Physical Memory Array
+        Location: System Board Or Motherboard
+        Use: System Memory
+        Error Correction Type: None
+        Maximum Capacity: 4 GB
+        Error Information Handle: Not Provided
+        Number Of Devices: 2
+
+Handle 0x001F
+        DMI type 127, 4 bytes.
+        End Of Table
+        eos
+        Facter::Manufacturer.expects(:get_dmi_table).returns(dmidecode_output)
+        Facter.fact(:kernel).stubs(:value).returns("Linux")
+        query = { 'Physical Memory Array' => [ { 'Location:' => 
'ramlocation'}]}
+        Facter::Manufacturer.dmi_find_system_info(query)
+        Facter.value(:ramlocation).should == "System Board Or Motherboard"
+    end
+end
-- 
1.7.0

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

Reply via email to