From: Paul Nasrat <pnas...@googlemail.com>

In addition to the stripping of the output of these facts this patchset:

Refactor - Extracted function to enable easier testing.
Tests - data driven tests for the dmidecode/smbios fact.

Paul

Signed-off-by: Daniel Berger <djber...@gmail.com>
---
 lib/facter/util/manufacturer.rb            |   17 +++++---
 spec/unit/data/linux_dmidecode_with_spaces |   60 ++++++++++++++++++++++++++++
 spec/unit/util/manufacturer.rb             |   26 ++++++++++++
 3 files changed, 97 insertions(+), 6 deletions(-)
 create mode 100644 spec/unit/data/linux_dmidecode_with_spaces
 create mode 100644 spec/unit/util/manufacturer.rb

diff --git a/lib/facter/util/manufacturer.rb b/lib/facter/util/manufacturer.rb
index c609a12..dd503f9 100644
--- a/lib/facter/util/manufacturer.rb
+++ b/lib/facter/util/manufacturer.rb
@@ -2,8 +2,8 @@
 # Support methods for manufacturer specific facts
 
 module Facter::Manufacturer
-    def self.dmi_find_system_info(name)
-        splitstr="Handle"
+
+    def self.get_dmi_table()
         case Facter.value(:kernel)
         when 'Linux'
             return nil unless FileTest.exists?("/usr/sbin/dmidecode")
@@ -19,18 +19,23 @@ module Facter::Manufacturer
             output=%x{/usr/pkg/sbin/dmidecode 2>/dev/null}
         when 'SunOS'
             return nil unless FileTest.exists?("/usr/sbin/smbios")
-            splitstr="ID    SIZE TYPE"
-            output=%x{/usr/sbin/smbios 2>/dev/null}
 
+            output=%x{/usr/sbin/smbios 2>/dev/null}
         else
-            return
+            output=nil
         end
+        return output
+    end
+
+    def self.dmi_find_system_info(name)
+        splitstr=  Facter.value(:kernel) ==  'SunOS' ? "ID    SIZE TYPE" : 
"Handle"
+        output = self.get_dmi_table()
         name.each_pair do |key,v|
             v.each do |v2|
                 v2.each_pair do |value,facterkey|
                     output.split(splitstr).each do |line|
                         if line =~ /#{key}/ and ( line =~ /#{value} 0x\d+ 
\(([-\w].*)\)\n*./ or line =~ /#{value} ([-\w].*)\n*./ )
-                            result = $1
+                            result = $1.strip
                             Facter.add(facterkey) do
                                 confine :kernel => [ :linux, :freebsd, 
:netbsd, :sunos ]
                                 setcode do
diff --git a/spec/unit/data/linux_dmidecode_with_spaces 
b/spec/unit/data/linux_dmidecode_with_spaces
new file mode 100644
index 0000000..0d77386
--- /dev/null
+++ b/spec/unit/data/linux_dmidecode_with_spaces
@@ -0,0 +1,60 @@
+# dmidecode 2.2
+SMBIOS 2.3 present.
+32 structures occupying 994 bytes.
+Table at 0x000F0800.
+Handle 0x0000
+        DMI type 0, 20 bytes.
+        BIOS Information
+                Vendor: Award Software International, Inc.
+                Version: 6.00 PG
+                Release Date: 01/03/2003
+                Address: 0xE0000
+                Runtime Size: 128 kB
+                ROM Size: 256 kB
+                Characteristics:
+                        ISA is supported
+                        PCI is supported
+                        PNP is supported
+                        APM is supported
+                        BIOS is upgradeable
+                        BIOS shadowing is allowed
+                        ESCD support is available
+                        Boot from CD is supported
+                        Selectable boot is supported
+                        BIOS ROM is socketed
+                        EDD is supported
+                        5.25"/360 KB floppy services are supported (int 13h)
+                        5.25"/1.2 MB floppy services are supported (int 13h)
+                        3.5"/720 KB floppy services are supported (int 13h)
+                        3.5"/2.88 MB floppy services are supported (int 13h)
+                        Print screen service is supported (int 5h)
+                        8042 keyboard services are supported (int 9h)
+                        Serial services are supported (int 14h)
+                        Printer services are supported (int 17h)
+                        CGA/mono video services are supported (int 10h)
+                        ACPI is supported
+                        USB legacy is supported
+                        AGP is supported
+                        LS-120 boot is supported
+                        ATAPI Zip drive boot is supported
+Handle 0x0001
+        DMI type 1, 25 bytes.
+        System Information
+                Manufacturer: MICRO-STAR INTERNATIONAL CO., LTD
+                Product Name: MS-6754 
+                Version:  
+                Serial Number:  
+                UUID: Not Present
+                Wake-up Type: Power Switch
+Handle 0x0002
+    DMI type 2, 8 bytes.
+    Base Board Information
+        Manufacturer: MICRO-STAR INTERNATIONAL CO., LTD
+        Product Name: MS-6754
+        Version:  
+        Serial Number:  
+
+Handle 0x001F
+    DMI type 127, 4 bytes.
+    End Of Table
+
diff --git a/spec/unit/util/manufacturer.rb b/spec/unit/util/manufacturer.rb
new file mode 100644
index 0000000..47a0c98
--- /dev/null
+++ b/spec/unit/util/manufacturer.rb
@@ -0,0 +1,26 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+require 'facter/util/manufacturer'
+
+describe Facter::Manufacturer do
+    it "should return the system DMI table" do
+        Facter::Manufacturer.should respond_to(:get_dmi_table)
+    end
+
+    it "should return nil on non-supported operating systems" do
+        Facter.stubs(:value).with(:kernel).returns("SomeThing")
+        Facter::Manufacturer.get_dmi_table().should be_nil
+    end
+
+    it "should strip white space on dmi output with spaces" do
+        sample_output_file = File.dirname(__FILE__) + 
"/../data/linux_dmidecode_with_spaces"
+        dmidecode_output = File.new(sample_output_file).read()
+        Facter::Manufacturer.expects(:get_dmi_table).returns(dmidecode_output)
+        Facter.fact(:kernel).stubs(:value).returns("Linux")
+
+        query = { '[Ss]ystem [Ii]nformation' => [ { 'Product(?: Name)?:' => 
'productname' } ] }
+
+        Facter::Manufacturer.dmi_find_system_info(query)
+        Facter.value(:productname).should == "MS-6754"
+    end
+end
\ No newline at end of file
-- 
1.6.2.2

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to puppet-...@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