summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshley Penney <ashley.penney@puppetlabs.com>2014-04-22 23:14:16 +0200
committerAshley Penney <ashley.penney@puppetlabs.com>2014-04-22 23:15:16 +0200
commit68acb59bf77d8d818489b1e2a97491cb7f327a0a (patch)
tree158f31acabe32a690c7261f99b17b89a21b5257b
parent6a5dee25a6005280ef86a523192acf9b4d02e7ce (diff)
Adjust the regular expression for facts.
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.
-rw-r--r--lib/facter/facter_dot_d.rb2
-rw-r--r--spec/unit/facter/facter_dot_d_spec.rb31
2 files changed, 32 insertions, 1 deletions
diff --git a/lib/facter/facter_dot_d.rb b/lib/facter/facter_dot_d.rb
index e414b20..2c096b0 100644
--- a/lib/facter/facter_dot_d.rb
+++ b/lib/facter/facter_dot_d.rb
@@ -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
index 0000000..1ecffc8
--- /dev/null
+++ b/spec/unit/facter/facter_dot_d_spec.rb
@@ -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