summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/reports/tagmail.rb6
-rwxr-xr-xspec/unit/reports/tagmail.rb94
-rwxr-xr-xspec/unit/transaction/report.rb19
-rw-r--r--test/lib/puppettest/reporttesting.rb2
-rwxr-xr-xtest/other/report.rb103
5 files changed, 117 insertions, 107 deletions
diff --git a/lib/puppet/reports/tagmail.rb b/lib/puppet/reports/tagmail.rb
index 5e54fa6ec..9f71782f0 100644
--- a/lib/puppet/reports/tagmail.rb
+++ b/lib/puppet/reports/tagmail.rb
@@ -38,7 +38,7 @@ Puppet::Reports.register_report(:tagmail) do
# Find all matching messages.
def match(taglists)
- reports = []
+ matching_logs = []
taglists.each do |emails, pos, neg|
# First find all of the messages matched by our positive tags
messages = nil
@@ -63,11 +63,11 @@ Puppet::Reports.register_report(:tagmail) do
Puppet.info "No messages to report to %s" % emails.join(",")
next
else
- reports << [emails, messages.collect { |m| m.to_report }.join("\n")]
+ matching_logs << [emails, messages.collect { |m| m.to_report }.join("\n")]
end
end
- return reports
+ return matching_logs
end
# Load the config file
diff --git a/spec/unit/reports/tagmail.rb b/spec/unit/reports/tagmail.rb
new file mode 100755
index 000000000..87b070bf4
--- /dev/null
+++ b/spec/unit/reports/tagmail.rb
@@ -0,0 +1,94 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+require 'puppet/reports'
+require 'puppettest'
+
+tagmail = Puppet::Reports.report(:tagmail)
+
+describe tagmail do
+ extend PuppetTest
+
+ before do
+ @processor = Puppet::Transaction::Report.new
+ @processor.extend(Puppet::Reports.report(:tagmail))
+ end
+
+ passers = File.join(datadir, "reports", "tagmail_passers.conf")
+ File.readlines(passers).each do |line|
+ it "should be able to parse '#{line.inspect}'" do
+ @processor.parse(line)
+ end
+ end
+
+ failers = File.join(datadir, "reports", "tagmail_failers.conf")
+ File.readlines(failers).each do |line|
+ it "should not be able to parse '#{line.inspect}'" do
+ lambda { @processor.parse(line) }.should raise_error(ArgumentError)
+ end
+ end
+
+ {
+ "tag: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag}, []],
+ "tag, other: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag other}, []],
+ "tag-other: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag-other}, []],
+ "tag, !other: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag}, %w{other}],
+ "tag, !other, one, !two: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag one}, %w{other two}],
+ "tag: abuse@domain.com, other@domain.com" => [%w{abuse@domain.com other@domain.com}, %w{tag}, []]
+
+ }.each do |line, results|
+ it "should parse '#{line}' as #{results.inspect}" do
+ @processor.parse(line).shift.should == results
+ end
+ end
+
+ describe "when matching logs" do
+ before do
+ @processor << Puppet::Util::Log.new(:level => :notice, :message => "first", :tags => %w{one})
+ @processor << Puppet::Util::Log.new(:level => :notice, :message => "second", :tags => %w{one two})
+ @processor << Puppet::Util::Log.new(:level => :notice, :message => "third", :tags => %w{one two three})
+ end
+
+ def match(pos = [], neg = [])
+ pos = Array(pos)
+ neg = Array(neg)
+ result = @processor.match([[%w{abuse@domain.com}, pos, neg]])
+ actual_result = result.shift
+ if actual_result
+ actual_result[1]
+ else
+ nil
+ end
+ end
+
+ it "should match all messages when provided the 'all' tag as a positive matcher" do
+ results = match("all")
+ %w{first second third}.each do |str|
+ results.should be_include(str)
+ end
+ end
+
+ it "should remove messages that match a negated tag" do
+ match("all", "three").should_not be_include("third")
+ end
+
+ it "should find any messages tagged with a provided tag" do
+ results = match("two")
+ results.should be_include("second")
+ results.should be_include("third")
+ results.should_not be_include("first")
+ end
+
+ it "should allow negation of specific tags from a specific tag list" do
+ results = match("two", "three")
+ results.should be_include("second")
+ results.should_not be_include("third")
+ end
+
+ it "should allow a tag to negate all matches" do
+ results = match([], "one")
+ results.should be_nil
+ end
+ end
+end
diff --git a/spec/unit/transaction/report.rb b/spec/unit/transaction/report.rb
index 10960de60..4f3c90d88 100755
--- a/spec/unit/transaction/report.rb
+++ b/spec/unit/transaction/report.rb
@@ -209,5 +209,22 @@ describe Puppet::Transaction::Report do
end
end
end
-end
+ describe "when producing a summary" do
+ before do
+ resource = Puppet::Type.type(:notify).new(:name => "testing")
+ catalog = Puppet::Resource::Catalog.new
+ catalog.add_resource resource
+ trans = catalog.apply
+
+ @report = trans.report
+ @report.calculate_metrics
+ end
+
+ %w{Changes Total Resources}.each do |main|
+ it "should include information on #{main} in the summary" do
+ @report.summary.should be_include(main)
+ end
+ end
+ end
+end
diff --git a/test/lib/puppettest/reporttesting.rb b/test/lib/puppettest/reporttesting.rb
index 4d88c3cfc..97e32b1c3 100644
--- a/test/lib/puppettest/reporttesting.rb
+++ b/test/lib/puppettest/reporttesting.rb
@@ -7,7 +7,7 @@ module PuppetTest::Reporttesting
# We have to use warning so that the logs always happen
log = Puppet.warning("Report test message %s" % i)
- report.newlog(log)
+ report << log
}
return report
diff --git a/test/other/report.rb b/test/other/report.rb
index 147a0eae7..dd3689432 100755
--- a/test/other/report.rb
+++ b/test/other/report.rb
@@ -66,20 +66,6 @@ class TestReports < Test::Unit::TestCase
assert(! report.logs.include?(log), "Report got log message after close")
end
- def test_newmetric
- report = nil
- assert_nothing_raised {
- report = Puppet::Transaction::Report.new
- }
-
- assert_nothing_raised {
- report.newmetric(:mymetric,
- :total => 12,
- :done => 6
- )
- }
- end
-
def test_store_report
# Create a bunch of log messages in an array.
report = Puppet::Transaction::Report.new
@@ -91,7 +77,7 @@ class TestReports < Test::Unit::TestCase
3.times { |i|
log = Puppet.warning("Report test message %s" % i)
- report.newlog(log)
+ report << log
}
assert_nothing_raised do
@@ -146,92 +132,5 @@ class TestReports < Test::Unit::TestCase
else
$stderr.puts "Install RRD for metric reporting tests"
end
-
- def test_tagmail_parsing
- report = Object.new
- report.extend(Puppet::Reports.report(:tagmail))
-
- passers = File.join(datadir, "reports", "tagmail_passers.conf")
- assert(FileTest.exists?(passers), "no passers file %s" % passers)
-
- File.readlines(passers).each do |line|
- assert_nothing_raised("Could not parse %s" % line.inspect) do
- report.parse(line)
- end
- end
-
- # Now make sure the failers fail
- failers = File.join(datadir, "reports", "tagmail_failers.conf")
- assert(FileTest.exists?(failers), "no failers file %s" % failers)
-
- File.readlines(failers).each do |line|
- assert_raise(ArgumentError, "Parsed %s" % line.inspect) do
- report.parse(line)
- end
- end
- end
-
- def test_tagmail_parsing_results
- report = Object.new
- report.extend(Puppet::Reports.report(:tagmail))
- # Now test a few specific lines to make sure we get the results we want
- {
- "tag: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag}, []],
- "tag, other: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag other}, []],
- "tag-other: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag-other}, []],
- "tag, !other: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag}, %w{other}],
- "tag, !other, one, !two: abuse@domain.com" => [%w{abuse@domain.com}, %w{tag one}, %w{other two}],
- "tag: abuse@domain.com, other@domain.com" => [%w{abuse@domain.com other@domain.com}, %w{tag}, []]
-
- }.each do |line, results|
- assert_nothing_raised("Failed to parse %s" % line.inspect) do
- assert_equal(results, report.parse(line).shift, "line %s returned incorrect results %s" % [line.inspect, results.inspect])
- end
- end
- end
-
- def test_tagmail_matching
- report = Puppet::Transaction::Report.new
- Puppet::Util::Log.close
- [%w{one}, %w{one two}, %w{one two three}, %w{one two three four}].each do |tags|
- log = Puppet::Util::Log.new(:level => :notice, :message => tags.join(" "), :tags => tags)
-
- report << log
- end
-
- list = report.logs.collect { |l| l.to_report }
-
- report.extend(Puppet::Reports.report(:tagmail))
-
- {
- [%w{abuse@domain.com}, %w{all}, []] => list,
- [%w{abuse@domain.com}, %w{all}, %w{three}] => list[0..1],
- [%w{abuse@domain.com}, %w{one}, []] => list,
- [%w{abuse@domain.com}, %w{two}, []] => list[1..3],
- [%w{abuse@domain.com}, %w{two}, %w{three}] => list[1..1],
- [%w{abuse@domain.com}, %w{}, %w{one}] => nil
- }.each do |args, expected|
- results = nil
- assert_nothing_raised("Could not match with %s" % args.inspect) do
- results = report.match([args])
- end
-
- if expected
- assert_equal([args[0], expected.join("\n")], results[0], "did get correct results for %s" % args.inspect)
- else
- assert_nil(results[0], "got a report for %s" % args.inspect)
- end
- end
- end
-
- def test_summary
- report = mkreport
-
- summary = report.summary
-
- %w{Changes Total Resources}.each do |main|
- assert(summary.include?(main), "Summary did not include info for %s" % main)
- end
- end
end