]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Adjust the regular expression for facts.
authorAshley Penney <ashley.penney@puppetlabs.com>
Tue, 22 Apr 2014 21:14:16 +0000 (23:14 +0200)
committerAshley Penney <ashley.penney@puppetlabs.com>
Tue, 22 Apr 2014 21:15:16 +0000 (23:15 +0200)
Previously this was incorrectly handling facts that were of the form
foo=1+1=2 due to the ='s in the actual fact contents.  Fix this and
add tests to try and prevent regressions.

lib/facter/facter_dot_d.rb
spec/unit/facter/facter_dot_d_spec.rb [new file with mode: 0644]

index e414b2077d35ff2f294f6b6d4a70795523dc1601..2c096b049d6630e750ac6fdb2bf065e90d86c8d7 100644 (file)
@@ -40,7 +40,7 @@ class Facter::Util::DotD
 
   def txt_parser(file)
     File.readlines(file).each do |line|
-      if line =~ /^(.+)=(.+)$/
+      if line =~ /^([^=]+)=(.+)$/
         var = $1; val = $2
 
         Facter.add(var) do
diff --git a/spec/unit/facter/facter_dot_d_spec.rb b/spec/unit/facter/facter_dot_d_spec.rb
new file mode 100644 (file)
index 0000000..1ecffc8
--- /dev/null
@@ -0,0 +1,31 @@
+require 'spec_helper'
+require 'facter/facter_dot_d'
+
+describe Facter::Util::DotD do
+
+  context 'returns a simple fact' do
+    before :each do
+      Facter.stubs(:version).returns('1.6.1')
+      subject.stubs(:entries).returns(['/etc/facter/facts.d/fake_fact.txt'])
+      File.stubs(:readlines).with('/etc/facter/facts.d/fake_fact.txt').returns(['fake_fact=fake fact'])
+      subject.create
+    end
+
+    it 'should return successfully' do
+      Facter.fact(:fake_fact).value.should == 'fake fact'
+    end
+  end
+
+  context 'returns a fact with equals signs' do
+    before :each do
+      Facter.stubs(:version).returns('1.6.1')
+      subject.stubs(:entries).returns(['/etc/facter/facts.d/foo.txt'])
+      File.stubs(:readlines).with('/etc/facter/facts.d/foo.txt').returns(['foo=1+1=2'])
+      subject.create
+    end
+
+    it 'should return successfully' do
+      Facter.fact(:foo).value.should == '1+1=2'
+    end
+  end
+end