logging 0.9.4 → 0.9.5

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/tasks/spec.rake ADDED
@@ -0,0 +1,54 @@
1
+
2
+ if HAVE_SPEC_RAKE_SPECTASK and not PROJ.spec.files.to_a.empty?
3
+ require 'spec/rake/verify_rcov'
4
+
5
+ namespace :spec do
6
+
7
+ desc 'Run all specs with basic output'
8
+ Spec::Rake::SpecTask.new(:run) do |t|
9
+ t.ruby_opts = PROJ.ruby_opts
10
+ t.spec_opts = PROJ.spec.opts
11
+ t.spec_files = PROJ.spec.files
12
+ t.libs += PROJ.libs
13
+ end
14
+
15
+ desc 'Run all specs with text output'
16
+ Spec::Rake::SpecTask.new(:specdoc) do |t|
17
+ t.ruby_opts = PROJ.ruby_opts
18
+ t.spec_opts = PROJ.spec.opts + ['--format', 'specdoc']
19
+ t.spec_files = PROJ.spec.files
20
+ t.libs += PROJ.libs
21
+ end
22
+
23
+ if HAVE_RCOV
24
+ desc 'Run all specs with RCov'
25
+ Spec::Rake::SpecTask.new(:rcov) do |t|
26
+ t.ruby_opts = PROJ.ruby_opts
27
+ t.spec_opts = PROJ.spec.opts
28
+ t.spec_files = PROJ.spec.files
29
+ t.libs += PROJ.libs
30
+ t.rcov = true
31
+ t.rcov_dir = PROJ.rcov.dir
32
+ t.rcov_opts = PROJ.rcov.opts + ['--exclude', 'spec']
33
+ end
34
+
35
+ RCov::VerifyTask.new(:verify) do |t|
36
+ t.threshold = PROJ.rcov.threshold
37
+ t.index_html = File.join(PROJ.rcov.dir, 'index.html')
38
+ t.require_exact_threshold = PROJ.rcov.threshold_exact
39
+ end
40
+
41
+ task :verify => :rcov
42
+ remove_desc_for_task %w(spec:clobber_rcov)
43
+ end
44
+
45
+ end # namespace :spec
46
+
47
+ desc 'Alias to spec:run'
48
+ task :spec => 'spec:run'
49
+
50
+ task :clobber => 'spec:clobber_rcov' if HAVE_RCOV
51
+
52
+ end # if HAVE_SPEC_RAKE_SPECTASK
53
+
54
+ # EOF
data/tasks/svn.rake ADDED
@@ -0,0 +1,47 @@
1
+
2
+ if HAVE_SVN
3
+
4
+ unless PROJ.svn.root
5
+ info = %x/svn info ./
6
+ m = %r/^Repository Root:\s+(.*)$/.match(info)
7
+ PROJ.svn.root = (m.nil? ? '' : m[1])
8
+ end
9
+ PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?
10
+
11
+ namespace :svn do
12
+
13
+ # A prerequisites task that all other tasks depend upon
14
+ task :prereqs
15
+
16
+ desc 'Show tags from the SVN repository'
17
+ task :show_tags => 'svn:prereqs' do |t|
18
+ tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
19
+ tags.gsub!(%r/\/$/, '')
20
+ tags = tags.split("\n").sort {|a,b| b <=> a}
21
+ puts tags
22
+ end
23
+
24
+ desc 'Create a new tag in the SVN repository'
25
+ task :create_tag => 'svn:prereqs' do |t|
26
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
27
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
28
+
29
+ svn = PROJ.svn
30
+ trunk = File.join(svn.root, svn.trunk)
31
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
32
+ tag = File.join(svn.root, svn.tags, tag)
33
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
34
+
35
+ puts "Creating SVN tag '#{tag}'"
36
+ unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
37
+ abort "Tag creation failed"
38
+ end
39
+ end
40
+
41
+ end # namespace :svn
42
+
43
+ task 'gem:release' => 'svn:create_tag'
44
+
45
+ end # if PROJ.svn.path
46
+
47
+ # EOF
data/tasks/test.rake CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
+ if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
2
3
  require 'rake/testtask'
3
4
 
4
5
  namespace :test do
@@ -34,4 +35,6 @@ task :test => 'test:run'
34
35
 
35
36
  task :clobber => 'test:clobber_rcov' if HAVE_RCOV
36
37
 
38
+ end
39
+
37
40
  # EOF
@@ -0,0 +1,183 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[.. setup])
3
+
4
+ module TestLogging
5
+ module TestAppenders
6
+
7
+ class TestBufferedIO < Test::Unit::TestCase
8
+ include LoggingTestCase
9
+
10
+ def setup
11
+ super
12
+ ::Logging.init
13
+ @levels = ::Logging::LEVELS
14
+
15
+ @sio = StringIO.new
16
+ @appender = ::Logging::Appenders::IO.new(
17
+ 'test_appender', @sio,
18
+ :auto_flushing => 3, :immediate_at => :error
19
+ )
20
+
21
+ begin readline rescue EOFError end
22
+ end
23
+
24
+ def test_append
25
+ event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
26
+ [1, 2, 3, 4], false)
27
+ @appender.append event
28
+ assert_raise(EOFError) {readline}
29
+
30
+ @appender.append event
31
+ assert_raise(EOFError) {readline}
32
+
33
+ event.level = @levels['debug']
34
+ event.data = 'the big log message'
35
+ @appender.append event
36
+
37
+ assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
38
+ assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
39
+ assert_equal "DEBUG TestLogger : the big log message\n", readline
40
+ assert_raise(EOFError) {readline}
41
+
42
+ @appender.close
43
+ assert_raise(RuntimeError) {@appender.append event}
44
+ end
45
+
46
+ def test_append_error
47
+ # setup an internal logger to capture error messages from the IO
48
+ # appender
49
+ log = StringIO.new
50
+ Logging::Logger[Logging].add_appenders(
51
+ Logging::Appenders::IO.new('__internal_io', log)
52
+ )
53
+ Logging::Logger[Logging].level = 'all'
54
+
55
+
56
+ # close the string IO object so we get an error
57
+ @sio.close
58
+ event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
59
+ [1, 2, 3, 4], false)
60
+ @appender.append event
61
+ log.seek 0
62
+ assert_raise(EOFError) {log.readline}
63
+
64
+ @appender.append event
65
+ log.seek 0
66
+ assert_raise(EOFError) {log.readline}
67
+
68
+ @appender.append event
69
+ log.seek 0
70
+ assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
71
+ assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
72
+
73
+ assert_equal false, @appender.closed?
74
+ assert_equal 5, @appender.level
75
+ end
76
+
77
+ def test_close
78
+ assert_equal false, @sio.closed?
79
+ assert_equal false, @appender.closed?
80
+
81
+ @appender.close
82
+ assert_equal true, @sio.closed?
83
+ assert_equal true, @appender.closed?
84
+
85
+ [STDIN, STDERR, STDOUT].each do |io|
86
+ @appender = ::Logging::Appenders::IO.new 'test', io
87
+ @appender.close
88
+ assert_equal false, io.closed?
89
+ assert_equal true, @appender.closed?
90
+ end
91
+ end
92
+
93
+ def test_concat
94
+ @appender << "this is a test message\n"
95
+ assert_raise(EOFError) {readline}
96
+
97
+ @appender << "this is another message\n"
98
+ assert_raise(EOFError) {readline}
99
+
100
+ @appender << "some other line\n"
101
+
102
+ assert_equal "this is a test message\n", readline
103
+ assert_equal "this is another message\n", readline
104
+ assert_equal "some other line\n", readline
105
+ assert_raise(EOFError) {readline}
106
+
107
+ @appender.close
108
+ assert_raise(RuntimeError) {@appender << 'message'}
109
+ end
110
+
111
+ def test_concat_error
112
+ # setup an internal logger to capture error messages from the IO
113
+ # appender
114
+ log = StringIO.new
115
+ Logging::Logger[Logging].add_appenders(
116
+ Logging::Appenders::IO.new('__internal_io', log)
117
+ )
118
+ Logging::Logger[Logging].level = 'all'
119
+
120
+ # close the string IO object so we get an error
121
+ @sio.close
122
+ @appender << 'oopsy'
123
+ log.seek 0
124
+ assert_raise(EOFError) {log.readline}
125
+
126
+ @appender << 'whoopsy'
127
+ log.seek 0
128
+ assert_raise(EOFError) {log.readline}
129
+
130
+ @appender << 'pooh'
131
+ log.seek 0
132
+ assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
133
+ assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
134
+
135
+ # and the appender does not close itself
136
+ assert_equal false, @appender.closed?
137
+ assert_equal 5, @appender.level
138
+ end
139
+
140
+ def test_flush
141
+ ary = []
142
+ @sio.instance_variable_set :@ary, ary
143
+ def @sio.flush() @ary << :flush end
144
+
145
+ @appender << "this is a test message\n"
146
+ assert_raise(EOFError) {readline}
147
+
148
+ @appender.flush
149
+ assert_equal :flush, ary.pop
150
+ assert_equal "this is a test message\n", readline
151
+ assert_raise(EOFError) {readline}
152
+ end
153
+
154
+ def test_immediate_at
155
+ event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
156
+ [1, 2, 3, 4], false)
157
+ @appender.append event
158
+ assert_raise(EOFError) {readline}
159
+
160
+ event.level = @levels['error']
161
+ event.data = 'an error message'
162
+ @appender.append event
163
+
164
+ assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
165
+ assert_equal "ERROR TestLogger : an error message\n", readline
166
+ assert_raise(EOFError) {readline}
167
+ end
168
+
169
+ private
170
+ def readline
171
+ @pos ||= 0
172
+ @sio.seek @pos
173
+ line = @sio.readline
174
+ @pos = @sio.tell
175
+ line
176
+ end
177
+
178
+ end # class TestBufferedIO
179
+
180
+ end # module TestAppenders
181
+ end # module TestLogging
182
+
183
+ # EOF
@@ -22,7 +22,7 @@ module TestAppenders
22
22
 
23
23
  @appender = ::Logging::Appenders::Email.new('email',
24
24
  'from' => 'me', 'to' => 'you',
25
- :buffsize => '3', :immediate_at => 'error, fatal',
25
+ :buffer_size => '3', :immediate_at => 'error, fatal',
26
26
  :domain => 'test.logging', :acct => 'test', :passwd => 'test'
27
27
  )
28
28
  end
@@ -42,7 +42,7 @@ module TestAppenders
42
42
  'from' => 'me', 'to' => 'you'
43
43
  )
44
44
 
45
- assert_equal(100, appender.instance_variable_get(:@buffsize))
45
+ assert_equal(100, appender.auto_flushing)
46
46
  assert_equal([], appender.instance_variable_get(:@immediate))
47
47
  assert_equal('localhost', appender.server)
48
48
  assert_equal(25, appender.port)
@@ -64,7 +64,7 @@ module TestAppenders
64
64
 
65
65
  assert_equal('lbrinn@gmail.com', appender.instance_variable_get(:@from))
66
66
  assert_equal(['everyone'], appender.instance_variable_get(:@to))
67
- assert_equal(1000, appender.instance_variable_get(:@buffsize))
67
+ assert_equal(1000, appender.auto_flushing)
68
68
  assert_equal('1234', appender.instance_variable_get(:@passwd))
69
69
  assert_equal([nil, nil, nil, true, true],
70
70
  appender.instance_variable_get(:@immediate))
@@ -74,27 +74,32 @@ module TestAppenders
74
74
  assert_equal('lbrinn', appender.acct)
75
75
  assert_equal(:tls, appender.authtype)
76
76
  assert_equal("I'm rich and you're not", appender.subject)
77
+
78
+ appender = ::Logging::Appenders::Email.new('email',
79
+ 'from' => 'me', 'to' => 'you', :auto_flushing => 42
80
+ )
81
+ assert_equal(42, appender.auto_flushing)
77
82
  end
78
83
 
79
84
  def test_append
80
- # with a buffer size of 0, mail will be sent each time a log event
85
+ # with auto_flushing enabled, mail will be sent each time a log event
81
86
  # occurs
82
- @appender.instance_variable_set(:@buffsize, 0)
87
+ @appender.auto_flushing = true
83
88
  event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
84
89
  [1, 2, 3, 4], false)
85
90
  @appender.append event
86
91
  assert_not_equal(@levels.length, @appender.level)
87
- assert_equal(0, @appender.queued_messages)
92
+ assert_equal(0, @appender.buffer.length)
88
93
 
89
94
  # increase the buffer size and log a few events
90
- @appender.instance_variable_set(:@buffsize, 3)
95
+ @appender.auto_flushing = 3
91
96
  @appender.append event
92
97
  @appender.append event
93
- assert_equal(2, @appender.queued_messages)
98
+ assert_equal(2, @appender.buffer.length)
94
99
 
95
100
  @appender.append event
96
101
  assert_not_equal(@levels.length, @appender.level)
97
- assert_equal(0, @appender.queued_messages)
102
+ assert_equal(0, @appender.buffer.length)
98
103
 
99
104
  # error and fatal messages should be send immediately (no buffering)
100
105
  error = ::Logging::LogEvent.new('ErrLogger', @levels['error'],
@@ -105,33 +110,33 @@ module TestAppenders
105
110
  @appender.append event
106
111
  @appender.append fatal
107
112
  assert_not_equal(@levels.length, @appender.level)
108
- assert_equal(0, @appender.queued_messages)
113
+ assert_equal(0, @appender.buffer.length)
109
114
 
110
115
  @appender.append error
111
116
  assert_not_equal(@levels.length, @appender.level)
112
- assert_equal(0, @appender.queued_messages)
117
+ assert_equal(0, @appender.buffer.length)
113
118
 
114
119
  @appender.append event
115
- assert_equal(1, @appender.queued_messages)
120
+ assert_equal(1, @appender.buffer.length)
116
121
  end
117
122
 
118
123
  def test_concat
119
- # with a buffer size of 0, mail will be sent each time a log event
124
+ # with auto_flushing enabled, mail will be sent each time a log event
120
125
  # occurs
121
- @appender.instance_variable_set(:@buffsize, 0)
126
+ @appender.auto_flushing = true
122
127
  @appender << 'test message'
123
128
  assert_not_equal(@levels.length, @appender.level)
124
- assert_equal(0, @appender.queued_messages)
129
+ assert_equal(0, @appender.buffer.length)
125
130
 
126
131
  # increase the buffer size and log a few events
127
- @appender.instance_variable_set(:@buffsize, 3)
132
+ @appender.auto_flushing = 3
128
133
  @appender << 'another test message'
129
134
  @appender << 'a second test message'
130
- assert_equal(2, @appender.queued_messages)
135
+ assert_equal(2, @appender.buffer.length)
131
136
 
132
137
  @appender << 'a third test message'
133
138
  assert_not_equal(@levels.length, @appender.level)
134
- assert_equal(0, @appender.queued_messages)
139
+ assert_equal(0, @appender.buffer.length)
135
140
  end
136
141
 
137
142
  def test_flush
@@ -139,11 +144,11 @@ module TestAppenders
139
144
  [1, 2, 3, 4], false)
140
145
  @appender.append event
141
146
  @appender << 'test message'
142
- assert_equal(2, @appender.queued_messages)
147
+ assert_equal(2, @appender.buffer.length)
143
148
 
144
149
  @appender.flush
145
150
  assert_not_equal(@levels.length, @appender.level)
146
- assert_equal(0, @appender.queued_messages)
151
+ assert_equal(0, @appender.buffer.length)
147
152
  end
148
153
 
149
154
  def test_close
@@ -151,11 +156,11 @@ module TestAppenders
151
156
  [1, 2, 3, 4], false)
152
157
  @appender.append event
153
158
  @appender << 'test message'
154
- assert_equal(2, @appender.queued_messages)
159
+ assert_equal(2, @appender.buffer.length)
155
160
 
156
161
  @appender.close
157
162
  assert_not_equal(@levels.length, @appender.level)
158
- assert_equal(0, @appender.queued_messages)
163
+ assert_equal(0, @appender.buffer.length)
159
164
  assert(@appender.closed?)
160
165
  end
161
166
 
@@ -51,6 +51,7 @@ module TestAppenders
51
51
  @appender.append event
52
52
 
53
53
  log.seek 0
54
+ assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
54
55
  assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
55
56
 
56
57
  assert_equal false, @appender.closed?
@@ -102,6 +103,7 @@ module TestAppenders
102
103
  @appender << 'oopsy'
103
104
 
104
105
  log.seek 0
106
+ assert_equal "INFO Logging : appender \"test_appender\" has been disabled", log.readline.strip
105
107
  assert_equal "ERROR Logging : <IOError> not opened for writing", log.readline.strip
106
108
 
107
109
  # and the appender does not close itself