devdnsd 1.1.2 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
  source "http://rubygems.org"
8
8
 
9
- gemspec
9
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,10 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- devdnsd (1.1.2)
5
- cowtech-extensions (~> 2.7.0)
4
+ devdnsd (1.1.9)
5
+ bovem (>= 0.5.0)
6
6
  gli (~> 1.6.0)
7
- rainbow (~> 1.1.0)
8
7
  rexec (~> 1.4.1)
9
8
  rubydns (~> 0.4.0)
10
9
 
@@ -27,12 +26,11 @@ GEM
27
26
  activesupport (3.2.7)
28
27
  i18n (~> 0.6)
29
28
  multi_json (~> 1.0)
29
+ bovem (0.5.0)
30
+ lazier (~> 1.0)
31
+ rainbow (~> 1.1.0)
30
32
  builder (3.0.0)
31
33
  coderay (1.0.7)
32
- cowtech-extensions (2.7.1)
33
- actionpack (~> 3.0)
34
- json (~> 1.7.0)
35
- tzinfo (~> 0.3.0)
36
34
  diff-lcs (1.1.3)
37
35
  erubis (2.7.0)
38
36
  eventmachine (0.12.10)
@@ -42,6 +40,10 @@ GEM
42
40
  i18n (0.6.0)
43
41
  journey (1.0.4)
44
42
  json (1.7.4)
43
+ lazier (1.0.1)
44
+ actionpack (~> 3.0)
45
+ json (~> 1.7.0)
46
+ tzinfo (~> 0.3.0)
45
47
  method_source (0.8)
46
48
  multi_json (1.3.6)
47
49
  net-dns (0.7.1)
data/devdnsd.gemspec CHANGED
@@ -22,11 +22,10 @@ Gem::Specification.new do |gem|
22
22
  gem.require_paths = ["lib"]
23
23
  #gem.platform = Gem::Platform::CURRENT
24
24
 
25
- gem.add_dependency("rubydns", "~> 0.4.0")
26
- gem.add_dependency("cowtech-extensions", "~> 2.7.0")
25
+ gem.add_dependency("bovem", ">= 0.5.0")
27
26
  gem.add_dependency("gli", "~> 1.6.0")
27
+ gem.add_dependency("rubydns", "~> 0.4.0")
28
28
  gem.add_dependency("rexec", "~> 1.4.1")
29
- gem.add_dependency("rainbow", "~> 1.1.0")
30
29
 
31
30
  gem.add_development_dependency("rspec", "~> 2.11.0")
32
31
  gem.add_development_dependency("rake", "~> 0.9.0")
@@ -20,7 +20,7 @@ module DevDNSd
20
20
  # The arguments passed via command-line.
21
21
  attr_reader :args
22
22
 
23
- # The {Logger Logger} for this application.
23
+ # The logger for this application.
24
24
  attr_accessor :logger
25
25
 
26
26
  # Creates a new application.
@@ -36,23 +36,25 @@ module DevDNSd
36
36
  }
37
37
 
38
38
  # Setup logger
39
- DevDNSd::Logger.start_time = Time.now
40
- @logger = DevDNSd::Logger.create(DevDNSd::Logger.get_real_file(@args[:global][:log_file]) || DevDNSd::Logger.default_file, Logger::INFO)
39
+ Bovem::Logger.start_time = Time.now
40
+ @logger = Bovem::Logger.create(Bovem::Logger.get_real_file(@args[:global][:log_file]) || Bovem::Logger.default_file, Logger::INFO)
41
41
 
42
42
  # Open configuration
43
43
  begin
44
- @config = DevDNSd::Configuration.new(@args[:global][:config], self, {
44
+ overrides = {
45
45
  :foreground => @args[:local][:foreground],
46
46
  :log_file => @args[:global][:log_file],
47
47
  :log_level => @args[:global][:log_level],
48
48
  :tld => @args[:global][:tld],
49
49
  :port => @args[:global][:port]
50
- })
50
+ }.reject {|k,v| v.nil? }
51
+
52
+ @config = DevDNSd::Configuration.new(@args[:global][:config], overrides, @logger)
53
+
51
54
  @logger = nil
52
55
  @logger = self.get_logger
53
-
54
- rescue DevDNSd::Errors::InvalidConfiguration, DevDNSd::Errors::InvalidRule => e
55
- @logger ? @logger.fatal(e.message) : DevDNSd::Logger.create("STDERR").fatal("Cannot log to #{config.log_file}. Exiting...")
56
+ rescue Bovem::Errors::InvalidConfiguration, DevDNSd::Errors::InvalidRule => e
57
+ @logger ? @logger.fatal(e.message) : Bovem::Logger.create("STDERR").fatal("Cannot log to #{config.log_file}. Exiting...")
56
58
  raise ::SystemExit
57
59
  end
58
60
 
@@ -71,7 +73,7 @@ module DevDNSd
71
73
  #
72
74
  # @return [Logger] The current logger of the application.
73
75
  def get_logger
74
- @logger ||= DevDNSd::Logger.create(@config.foreground ? DevDNSd::Logger.default_file : @config.log_file, @config.log_level, @log_formatter)
76
+ @logger ||= Bovem::Logger.create(@config.foreground ? Bovem::Logger.default_file : @config.log_file, @config.log_level, @log_formatter)
75
77
  end
76
78
 
77
79
  # Gets the path for the resolver file.
@@ -6,7 +6,7 @@
6
6
 
7
7
  module DevDNSd
8
8
  # This class holds the configuration of the applicaton.
9
- class Configuration
9
+ class Configuration < Bovem::Configuration
10
10
  # If to run the server in foreground. Default: `false`.
11
11
  attr_accessor :foreground
12
12
 
@@ -38,9 +38,10 @@ module DevDNSd
38
38
  # ```
39
39
  #
40
40
  # @param file [String] The file to read.
41
- # @param application [Application] The application which this configuration is attached to.
42
41
  # @param overrides [Hash] A set of values which override those set in the configuration file.
43
- def initialize(file = nil, application = nil, overrides = {})
42
+ # @param logger [Logger] The logger to use for notifications.
43
+ # @see parse
44
+ def initialize(file = nil, overrides = {}, logger = nil)
44
45
  @address = "0.0.0.0"
45
46
  @port = 7771
46
47
  @tld = "dev"
@@ -49,31 +50,11 @@ module DevDNSd
49
50
  @rules = []
50
51
  @foreground = false
51
52
 
52
- if file.present?
53
- begin
54
- # Open the file
55
- path = ::Pathname.new(file).realpath
56
- application.logger.info("Using configuration file #{path}.") if application
57
- self.tap do |config|
58
- eval(::File.read(path))
59
- end
60
-
61
- @log_file = $stdout if @log_file == "STDOUT"
62
- @log_file = $stderr if @log_file == "STDERR"
63
- rescue ::Errno::ENOENT, ::LoadError
64
- rescue ::Exception => e
65
- raise DevDNSd::Errors::InvalidConfiguration.new("Config file #{file} is not valid.")
66
- end
67
- end
68
-
69
- # Apply overrides
70
- if overrides.is_a?(::Hash) then
71
- overrides.each_pair do |k, v|
72
- self.send("#{k}=", v) if self.respond_to?("#{k}=") && !v.nil?
73
- end
74
- end
53
+ super(file, overrides, logger)
75
54
 
76
55
  # Make sure some arguments are of correct type
56
+ @log_file = $stdout if @log_file == "STDOUT"
57
+ @log_file = $stderr if @log_file == "STDERR"
77
58
  @port = @port.to_integer
78
59
  @log_level = @log_level.to_integer
79
60
 
@@ -10,9 +10,5 @@ module DevDNSd
10
10
  # This exception is raised if a {Rule Rule} is invalid.
11
11
  class InvalidRule < ::ArgumentError
12
12
  end
13
-
14
- # This exception is raised if a {Configuration Configuration} is invalid.
15
- class InvalidConfiguration < ::ArgumentError
16
- end
17
13
  end
18
14
  end
@@ -16,7 +16,7 @@ module DevDNSd
16
16
  MINOR = 1
17
17
 
18
18
  # The patch version.
19
- PATCH = 2
19
+ PATCH = 9
20
20
 
21
21
  # The current version number of DevDNSd.
22
22
  STRING = [MAJOR, MINOR, PATCH].compact.join(".")
data/lib/devdnsd.rb CHANGED
@@ -5,19 +5,15 @@
5
5
  #
6
6
 
7
7
  require "rubygems"
8
+ require "bovem"
8
9
  require "rubydns"
9
10
  require "gli"
10
11
  require "rexec/daemon"
11
- require "pathname"
12
- require "rainbow"
13
- require "cowtech-extensions"
14
- require "rbconfig"
15
12
 
16
- Cowtech::Extensions.load!
13
+ Lazier.load!(:object)
17
14
 
18
15
  require "devdnsd/application"
19
16
  require "devdnsd/configuration"
20
17
  require "devdnsd/errors"
21
- require "devdnsd/logger"
22
18
  require "devdnsd/rule"
23
19
  require "devdnsd/version" if !defined?(DevDNSd::Version)
@@ -8,7 +8,7 @@ require "spec_helper"
8
8
 
9
9
  describe DevDNSd::Application do
10
10
  before(:each) do
11
- DevDNSd::Logger.stub(:default_file).and_return("/dev/null")
11
+ Bovem::Logger.stub(:default_file).and_return("/dev/null")
12
12
  end
13
13
 
14
14
  let(:log_file) { "/tmp/devdnsd-test-log-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
@@ -53,11 +53,9 @@ describe DevDNSd::Application do
53
53
  end
54
54
 
55
55
  describe "#perform_server" do
56
- let(:application){ DevDNSd::Application.instance({:log_file => log_file, :config => sample_config}, {}, {}, true) }
56
+ let(:application){ DevDNSd::Application.instance({:log_file => log_file, :config => sample_config}, {}, [], true) }
57
57
 
58
58
  before(:each) do
59
- DevDNSd::Logger.stub(:default_file).and_return($stdout)
60
-
61
59
  class DevDNSd::Application
62
60
  def on_start
63
61
  Thread.main[:resolver].wakeup if Thread.main[:resolver].try(:alive?)
@@ -170,7 +168,7 @@ describe DevDNSd::Application do
170
168
  end
171
169
  end
172
170
 
173
- let(:application){ DevDNSd::Application.instance({:log_file => log_file, :config => sample_config}, {}, {}, true) }
171
+ let(:application){ DevDNSd::Application.instance({:log_file => log_file, :config => sample_config}, {}, [], true) }
174
172
  let(:transaction){ FakeTransaction.new }
175
173
 
176
174
  it "should match a valid string request" do
@@ -394,7 +392,7 @@ describe DevDNSd::Application do
394
392
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
395
393
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
396
394
 
397
- DevDNSd::Logger.stub(:default_file).and_return($stdout)
395
+ Bovem::Logger.stub(:default_file).and_return($stdout)
398
396
  application.action_install
399
397
  application.action_uninstall
400
398
  expect(::File.exists?(application.launch_agent_path)).to be_false
@@ -10,7 +10,7 @@ require "tempfile"
10
10
  describe DevDNSd::Configuration do
11
11
  class DevDNSd::Application
12
12
  def logger
13
- DevDNSd::Logger.new("/dev/null")
13
+ Bovem::Logger.new("/dev/null")
14
14
  end
15
15
  end
16
16
 
@@ -18,7 +18,7 @@ describe DevDNSd::Configuration do
18
18
 
19
19
  let(:new_application) {
20
20
  app = DevDNSd::Application.new({:log_file => log_file})
21
- app.logger = DevDNSd::Logger.create("/dev/null", DevDNSd::Logger::DEBUG)
21
+ app.logger = Bovem::Logger.create("/dev/null", Bovem::Logger::DEBUG)
22
22
  app
23
23
  }
24
24
 
@@ -33,36 +33,6 @@ describe DevDNSd::Configuration do
33
33
  expect(config.rules.count).to eq(1)
34
34
  expect(config.foreground).to eq(false)
35
35
  end
36
-
37
- it "reads a valid configuration file" do
38
- file = ::Tempfile.new('devdnsd-test')
39
- file.write("config.port = 7772")
40
- file.close
41
-
42
- config = DevDNSd::Configuration.new(file.path, new_application)
43
- expect(config.port).to eq(7772)
44
- file.unlink
45
- end
46
-
47
- it "reject an invalid configuration" do
48
- file = ::Tempfile.new('devdnsd-test')
49
- file.write("config.port = ")
50
- file.close
51
-
52
- expect { config = DevDNSd::Configuration.new(file.path, new_application)}.to raise_error(DevDNSd::Errors::InvalidConfiguration)
53
- file.unlink
54
- end
55
-
56
- it "allows overrides" do
57
- file = ::Tempfile.new('devdnsd-test')
58
- file.write("config.port = 7772")
59
- file.close
60
-
61
- config = DevDNSd::Configuration.new(file.path, new_application, {:foreground => true, :port => 7773})
62
- expect(config.port).to eq(7773)
63
- config.foreground = true
64
- file.unlink
65
- end
66
36
  end
67
37
 
68
38
  describe "#add_rule" do
data/utils/tester.rb CHANGED
@@ -7,11 +7,9 @@
7
7
 
8
8
  basedir = File.expand_path(File.dirname(__FILE__))
9
9
  require "rubygems"
10
- require "logger"
10
+ require "bovem"
11
11
  require "rainbow"
12
- require "active_support/all"
13
12
  require "net/dns"
14
- require basedir + "/../lib/devdnsd/logger"
15
13
 
16
14
  # Patch to avoid resolving of hostname containing numbers.
17
15
  class Net::DNS::Resolver
@@ -74,7 +72,7 @@ end
74
72
  def devdnsd_resolv(address = "match.dev", type = "ANY", nameserver = "127.0.0.1", port = 7771, logger = nil)
75
73
  rv = []
76
74
 
77
- logger = DevDNSd::Logger.new("/dev/null", DevDNSd::Logger::DEBUG) if !logger
75
+ logger = Bovem::Logger.new("/dev/null", Bovem::Logger::DEBUG) if !logger
78
76
  logger.info("Resolving address #{address.bright} with type #{type.to_s.bright} at nameserver #{nameserver.bright}:#{port.to_s.bright} ...")
79
77
  tmpfile = "/tmp/devdnsd-test-tester-#{Time.now.strftime("%Y%m%d-%H:%M:%S")}"
80
78
 
@@ -121,7 +119,7 @@ if __FILE__ == $0 then
121
119
  type = (ARGV[1] || "ANY").upcase
122
120
  nameserver = ARGV[2] || "127.0.0.1"
123
121
  port = ARGV[3] || 7771
124
- logger = DevDNSd::Logger.create($stdout, Logger::DEBUG)
122
+ logger = Bovem::Logger.create($stdout, Logger::DEBUG)
125
123
 
126
124
  devdnsd_resolv(address, type, nameserver, port, logger)
127
125
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devdnsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,37 +12,21 @@ cert_chain: []
12
12
  date: 2012-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rubydns
15
+ name: bovem
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 0.4.0
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: 0.4.0
30
- - !ruby/object:Gem::Dependency
31
- name: cowtech-extensions
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
19
+ - - ! '>='
36
20
  - !ruby/object:Gem::Version
37
- version: 2.7.0
21
+ version: 0.5.0
38
22
  type: :runtime
39
23
  prerelease: false
40
24
  version_requirements: !ruby/object:Gem::Requirement
41
25
  none: false
42
26
  requirements:
43
- - - ~>
27
+ - - ! '>='
44
28
  - !ruby/object:Gem::Version
45
- version: 2.7.0
29
+ version: 0.5.0
46
30
  - !ruby/object:Gem::Dependency
47
31
  name: gli
48
32
  requirement: !ruby/object:Gem::Requirement
@@ -60,13 +44,13 @@ dependencies:
60
44
  - !ruby/object:Gem::Version
61
45
  version: 1.6.0
62
46
  - !ruby/object:Gem::Dependency
63
- name: rexec
47
+ name: rubydns
64
48
  requirement: !ruby/object:Gem::Requirement
65
49
  none: false
66
50
  requirements:
67
51
  - - ~>
68
52
  - !ruby/object:Gem::Version
69
- version: 1.4.1
53
+ version: 0.4.0
70
54
  type: :runtime
71
55
  prerelease: false
72
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,15 +58,15 @@ dependencies:
74
58
  requirements:
75
59
  - - ~>
76
60
  - !ruby/object:Gem::Version
77
- version: 1.4.1
61
+ version: 0.4.0
78
62
  - !ruby/object:Gem::Dependency
79
- name: rainbow
63
+ name: rexec
80
64
  requirement: !ruby/object:Gem::Requirement
81
65
  none: false
82
66
  requirements:
83
67
  - - ~>
84
68
  - !ruby/object:Gem::Version
85
- version: 1.1.0
69
+ version: 1.4.1
86
70
  type: :runtime
87
71
  prerelease: false
88
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +74,7 @@ dependencies:
90
74
  requirements:
91
75
  - - ~>
92
76
  - !ruby/object:Gem::Version
93
- version: 1.1.0
77
+ version: 1.4.1
94
78
  - !ruby/object:Gem::Dependency
95
79
  name: rspec
96
80
  requirement: !ruby/object:Gem::Requirement
@@ -242,13 +226,11 @@ files:
242
226
  - lib/devdnsd/application.rb
243
227
  - lib/devdnsd/configuration.rb
244
228
  - lib/devdnsd/errors.rb
245
- - lib/devdnsd/logger.rb
246
229
  - lib/devdnsd/rule.rb
247
230
  - lib/devdnsd/version.rb
248
231
  - spec/coverage_helper.rb
249
232
  - spec/devdnsd/application_spec.rb
250
233
  - spec/devdnsd/configuration_spec.rb
251
- - spec/devdnsd/logger_spec.rb
252
234
  - spec/devdnsd/rule_spec.rb
253
235
  - spec/spec_helper.rb
254
236
  - utils/tester.rb
@@ -266,7 +248,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
266
248
  version: '0'
267
249
  segments:
268
250
  - 0
269
- hash: -4498908413756434823
251
+ hash: -1047347418538266130
270
252
  required_rubygems_version: !ruby/object:Gem::Requirement
271
253
  none: false
272
254
  requirements:
@@ -275,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
275
257
  version: '0'
276
258
  segments:
277
259
  - 0
278
- hash: -4498908413756434823
260
+ hash: -1047347418538266130
279
261
  requirements: []
280
262
  rubyforge_project: devdnsd
281
263
  rubygems_version: 1.8.24
@@ -286,7 +268,6 @@ test_files:
286
268
  - spec/coverage_helper.rb
287
269
  - spec/devdnsd/application_spec.rb
288
270
  - spec/devdnsd/configuration_spec.rb
289
- - spec/devdnsd/logger_spec.rb
290
271
  - spec/devdnsd/rule_spec.rb
291
272
  - spec/spec_helper.rb
292
273
  has_rdoc:
@@ -1,90 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
- # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
- #
6
-
7
- module DevDNSd
8
- # A custom logger for DevDNSd.
9
- class Logger < ::Logger
10
- # The start time of first line. This allows to show a `T+0.1234` information into the log.
11
- mattr_accessor :start_time
12
-
13
- # The file or device to log messages to.
14
- attr_reader :device
15
-
16
- # Creates a new logger
17
- # @see http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html
18
- #
19
- # @param logdev [String|IO] The log device. This is a filename (String) or IO object (typically STDOUT, STDERR, or an open file).
20
- # @param shift_age [Fixnum] Number of old log files to keep, or frequency of rotation (daily, weekly or monthly).
21
- # @param shift_size [Fixnum] Maximum logfile size (only applies when shift_age is a number).
22
- def initialize(logdev, shift_age = 0, shift_size = 1048576)
23
- @device = logdev
24
- super(logdev, shift_age, shift_size)
25
- end
26
-
27
- # Creates a new logger
28
- #
29
- # @param file [String|IO] The log device. This is a filename (String) or IO object (typically STDOUT, STDERR, or an open file).
30
- # @param level [Fixnum] The minimum severity to log. See http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html for valid levels.
31
- # @param formatter [Proc] The formatter to use for logging.
32
- # @return [Logger] The new logger.
33
- def self.create(file = nil, level = Logger::INFO, formatter = nil)
34
- file ||= self.default_file
35
-
36
- begin
37
- rv = self.new(self.get_real_file(file))
38
- rescue
39
- raise DevDNSd::Errors::InvalidConfiguration
40
- end
41
-
42
- rv.level = level.to_i
43
- rv.formatter = formatter || self.default_formatter
44
- rv
45
- end
46
-
47
- # Translates a file to standard input or standard ouput in some special cases.
48
- #
49
- # @param file [String] The string to translate.
50
- # @return [String|IO] The translated file name.
51
- def self.get_real_file(file)
52
- case file
53
- when "STDOUT" then $stdout
54
- when "STDERR" then $stderr
55
- else file
56
- end
57
- end
58
-
59
- # The default file for logging.
60
- # @return [String|IO] The default file for logging.
61
- def self.default_file
62
- @default_file ||= $stdout
63
- end
64
-
65
- # The default formatter for logging.
66
- # @return [Proc] The default formatter for logging.
67
- def self.default_formatter
68
- @default_formatter ||= ::Proc.new {|severity, datetime, progname, msg|
69
- color = case severity
70
- when "DEBUG" then :cyan
71
- when "INFO" then :green
72
- when "WARN" then :yellow
73
- when "ERROR" then :red
74
- when "FATAL" then :magenta
75
- else :white
76
- end
77
-
78
- header = ("[%s T+%0.5f] %s:" %[datetime.strftime("%Y/%b/%d %H:%M:%S"), [datetime.to_f - self.start_time.to_f, 0].max, severity.rjust(5)]).bright
79
- header = header.color(color) if color.present?
80
- "%s %s\n" % [header, msg]
81
- }
82
- end
83
-
84
- # The log time of the first logger. This allows to show a `T+0.1234` information into the log.
85
- # @return [Time] The log time of the first logger.
86
- def self.start_time
87
- @start_time ||= ::Time.now
88
- end
89
- end
90
- end
@@ -1,100 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
- # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
- #
6
-
7
- require "spec_helper"
8
-
9
- describe DevDNSd::Logger do
10
- before(:each) do
11
- Sickill::Rainbow.enabled = false
12
- end
13
-
14
- describe ".create" do
15
- it("should create a new default logger") do
16
- logger = DevDNSd::Logger.create
17
- expect(logger.device).to eq(DevDNSd::Logger.default_file)
18
- expect(logger.level).to eq(::Logger::INFO)
19
- expect(logger.formatter).to eq(DevDNSd::Logger.default_formatter)
20
- end
21
-
22
- it("should create a logger with a custom file and level") do
23
- logger = DevDNSd::Logger.create("/dev/null", ::Logger::WARN)
24
- expect(logger.device).to eq("/dev/null")
25
- expect(logger.level).to eq(::Logger::WARN)
26
- expect(logger.formatter).to eq(DevDNSd::Logger.default_formatter)
27
- end
28
-
29
- it("should create a logger with a custom formatter") do
30
- formatter = Proc.new {|severity, datetime, progname, msg| msg }
31
- logger = DevDNSd::Logger.create("/dev/null", ::Logger::WARN, formatter)
32
- expect(logger.device).to eq("/dev/null")
33
- expect(logger.level).to eq(::Logger::WARN)
34
- expect(logger.formatter).to eq(formatter)
35
- end
36
-
37
- it("should raise exceptions for invalid files") do
38
- expect { DevDNSd::Logger.create("/invalid/file") }.to raise_error(DevDNSd::Errors::InvalidConfiguration)
39
- end
40
- end
41
-
42
- describe ".default_formatter" do
43
- let(:output) { ::StringIO.new }
44
- let(:logger) { DevDNSd::Logger.create(output, Logger::DEBUG) }
45
-
46
- def get_last_line(buffer)
47
- buffer.string.split("\n").last.strip.gsub(/ T\+\d+\.\d+/, "")
48
- end
49
-
50
- it "should correctly format a DEBUG message" do
51
- logger.debug("Message.")
52
- expect(get_last_line(output)).to eq("[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] DEBUG: Message.")
53
- end
54
-
55
- it "should correctly format a INFO message" do
56
- logger.info("Message.")
57
- expect(get_last_line(output)).to eq("[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] INFO: Message.")
58
- end
59
-
60
- it "should correctly format a WARN message" do
61
- logger.warn("Message.")
62
- expect(get_last_line(output)).to eq("[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] WARN: Message.")
63
- end
64
-
65
- it "should correctly format a ERROR message" do
66
- logger.error("Message.")
67
- expect(get_last_line(output)).to eq("[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] ERROR: Message.")
68
- end
69
-
70
- it "should correctly format a FATAL message" do
71
- logger.fatal("Message.")
72
- expect(get_last_line(output)).to eq("[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] FATAL: Message.")
73
- end
74
-
75
- it "should correctly format a INVALID message" do
76
- logger.log(::Logger::UNKNOWN, "Message.")
77
- expect(get_last_line(output)).to eq("[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] ANY: Message.")
78
- end
79
- end
80
-
81
- describe ".get_real_file" do
82
- it("should return the standard ouput") do
83
- expect(DevDNSd::Logger.get_real_file("STDOUT")).to eq($stdout )
84
- end
85
-
86
- it("should return the standard error") do
87
- expect(DevDNSd::Logger.get_real_file("STDERR")).to eq($stderr )
88
- end
89
-
90
- it("should return the file") do
91
- expect(DevDNSd::Logger.get_real_file("/dev/null")).to eq("/dev/null" )
92
- end
93
- end
94
-
95
- describe ".default_file" do
96
- it("should return the standard output") do
97
- expect(DevDNSd::Logger.default_file).to eq($stdout)
98
- end
99
- end
100
- end