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.