Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / spec / unit / logger / syslog_logger_spec.rb
diff --git a/spec/unit/logger/syslog_logger_spec.rb b/spec/unit/logger/syslog_logger_spec.rb
new file mode 100644 (file)
index 0000000..283ca5e
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/env rspec
+
+require 'spec_helper'
+
+module MCollective
+  unless Util.windows?
+    require 'mcollective/logger/syslog_logger'
+
+    module Logger
+      describe Syslog_logger do
+        describe "#start" do
+          before do
+            Config.instance.stubs(:logfacility).returns("user")
+            Config.instance.stubs(:loglevel).returns("error")
+          end
+
+          it "should close the syslog if already opened" do
+            Syslog.expects("opened?").returns(true)
+            Syslog.expects(:close).once
+            Syslog.expects(:open).once
+
+            logger = Syslog_logger.new
+            logger.start
+          end
+
+          it "should open syslog with the correct facility" do
+            logger = Syslog_logger.new
+            Syslog.expects(:open).with("rspec", 3, Syslog::LOG_USER).once
+            logger.start
+          end
+
+          it "should set the logger level correctly" do
+            logger = Syslog_logger.new
+            Syslog.expects(:open).with("rspec", 3, Syslog::LOG_USER).once
+            logger.expects(:set_level).with(:error).once
+            logger.start
+          end
+        end
+
+        describe "#syslog_facility" do
+          it "should support valid facilities" do
+            logger = Syslog_logger.new
+            logger.syslog_facility("LOCAL1").should == Syslog::LOG_LOCAL1
+            logger.syslog_facility("local1").should == Syslog::LOG_LOCAL1
+          end
+
+          it "should set LOG_USER for unknown facilities" do
+            logger = Syslog_logger.new
+            IO.any_instance.expects(:puts).with("Invalid syslog facility rspec supplied, reverting to USER")
+            logger.syslog_facility("rspec").should == Syslog::LOG_USER
+          end
+        end
+
+        describe "#log" do
+          it "should log higher than configured levels" do
+            logger = Syslog_logger.new
+            logger.set_level(:debug)
+            Syslog.expects(:err).once
+            logger.log(:error, "rspec", "rspec")
+          end
+
+          it "should log using the correctly mapped level" do
+            logger = Syslog_logger.new
+            Syslog.expects(:err).with("rspec rspec").once
+            logger.set_level(:debug)
+            logger.log(:error, "rspec", "rspec")
+          end
+
+          it "should resort to STDERR output if all else fails" do
+            logger = Syslog_logger.new
+            IO.any_instance.expects(:puts).with("error: rspec").once
+
+            logger.log(:error, "rspec", "rspec")
+          end
+        end
+      end
+    end
+  end
+end