Merge pull request #152 from Phil-Friderici/specs

Add spec tests for ssh_version* facts
diff --git a/lib/facter/ssh.rb b/lib/facter/ssh.rb
index ef51e24..aea918d 100644
--- a/lib/facter/ssh.rb
+++ b/lib/facter/ssh.rb
@@ -10,7 +10,7 @@
   setcode do
     ssh_version = Facter.value(:ssh_version)
     if ssh_version
-      ssh_version.match(/\d+\.\d+/)[0]
+      ssh_version.match(/(\d+\.\d+\.\d+|\d+\.\d+)/)[0]
     end
   end
 end
diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb
index dc58e74..6f95835 100644
--- a/spec/classes/init_spec.rb
+++ b/spec/classes/init_spec.rb
@@ -6,7 +6,7 @@
       context "release #{release}" do
         let(:facts) do
           { :fqdn              => 'monkey.example.com',
-            :lsbmajdistrelease => :release,
+            :lsbmajdistrelease => release,
             :osfamily          => 'RedHat',
             :sshrsakey         => 'AAAAB3NzaC1yc2EAAAABIwAAAQEArGElx46pD6NNnlxVaTbp0ZJMgBKCmbTCT3RaeCk0ZUJtQ8wkcwTtqIXmmiuFsynUT0DFSd8UIodnBOPqitimmooAVAiAi30TtJVzADfPScMiUnBJKZajIBkEMkwUcqsfh630jyBvLPE/kyQcxbEeGtbu1DG3monkeymanOBW1AKc5o+cJLXcInLnbowMG7NXzujT3BRYn/9s5vtT1V9cuZJs4XLRXQ50NluxJI7sVfRPVvQI9EMbTS4AFBXUej3yfgaLSV+nPZC/lmJ2gR4t/tKvMFF9m16f8IcZKK7o0rK7v81G/tREbOT5YhcKLK+0wBfR6RsmHzwy4EddZloyLQ==',
           }
diff --git a/spec/unit/facter/ssh_spec.rb b/spec/unit/facter/ssh_spec.rb
new file mode 100644
index 0000000..c8b533e
--- /dev/null
+++ b/spec/unit/facter/ssh_spec.rb
@@ -0,0 +1,41 @@
+require 'spec_helper'
+
+describe 'Facter::Util::Fact' do
+
+  version_matrix = {
+    'OpenSSH_5.1p1, OpenSSL 0.9.8a 11 Oct 2005' => { :ssh_version => 'OpenSSH_5.1p1', :ssh_version_numeric => '5.1' }, # SLES 10.4 i586
+    'OpenSSH_5.1p1, OpenSSL 0.9.8j-fips 07 Jan 2009' => { :ssh_version => 'OpenSSH_5.1p1', :ssh_version_numeric => '5.1' }, # SLES 11.2 x86_64
+    'OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013' => { :ssh_version => 'OpenSSH_5.3p1', :ssh_version_numeric => '5.3' }, # CentOS 6.5 / RedHat 6.7 x86_64
+    'OpenSSH_6.2p2, OpenSSL 0.9.8j-fips 07 Jan 2009' => { :ssh_version => 'OpenSSH_6.2p2', :ssh_version_numeric => '6.2' },
+    'OpenSSH_6.6.1p1, OpenSSL 0.9.8j-fips 07 Jan 2009' => { :ssh_version => 'OpenSSH_6.6.1p1', :ssh_version_numeric => '6.6.1' }, # SLES 11.4 x86_64
+    'Sun_SSH_1.1, SSH protocols 1.5/2.0, OpenSSL 0x0090700f' => { :ssh_version => 'Sun_SSH_1.1', :ssh_version_numeric => '1.1' }, # Solaris 9 SPARC
+    'Sun_SSH_1.1.5, SSH protocols 1.5/2.0, OpenSSL 0x0090704f' => { :ssh_version => 'Sun_SSH_1.1.5', :ssh_version_numeric => '1.1.5' }, # Solaris 10 SPARC
+    'broken string' => { :ssh_version => 'broken', :ssh_version_numeric => nil },
+  }
+
+  describe 'ssh_version' do
+    version_matrix.sort.each do |ssh_version_string, result|
+      context "with <#{ssh_version_string}>" do
+        before do
+          Facter.clear
+          # Stub exec for older Facter Otherwise this spec will fail with
+          # unexpected invocation: Facter::Util::Resolution.exec('uname -s')
+          Facter::Util::Resolution.stubs(:exec)
+          Facter::Util::Resolution.stubs(:exec).with('ssh -V 2>&1').returns("#{ssh_version_string}")
+        end
+
+        context "ssh_version should return <#{result[:ssh_version]}>" do
+          it do
+            expect(Facter.fact(:ssh_version).value).to eq(result[:ssh_version])
+          end
+        end
+
+        context "ssh_version_numeric should return <#{result[:ssh_version_numeric]}>" do
+          it do
+            expect(Facter.fact(:ssh_version_numeric).value).to eq(result[:ssh_version_numeric])
+          end
+        end
+      end
+    end
+  end
+end