maestro_plugin 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d24ae39f1edbe831c14c926e4b7a39ac11456da4
4
- data.tar.gz: af8ca346b352b67a636adc1897568f99e8b75e1c
3
+ metadata.gz: e719015fbdabceaf74a2229bb76721c822f45346
4
+ data.tar.gz: c53a224127581e6ad1849888ca3cb4743b08f4f9
5
5
  SHA512:
6
- metadata.gz: 72105b60a7dec153f3fc26742edb4fd55c5c72e875d46c3b81856d161e2254b8d29915bff59bb44a11786be9c801c7d103f40beda5dd183d493fe3d828c0f7b1
7
- data.tar.gz: a1d4363f34af636d7cd8c46cace6b1f67e9e858c8f55805616d082f020330411624704c9cc57fbe1de0221e675f8c0869059f1bc746349758db2f0de01aac2ec
6
+ metadata.gz: 8b218bf2c4cd5055aaaa656531983d3c499e982d87b5f9569eae2775ba5264935a9fb119899345f88c195ddd0f05fd194803699040148faa52893a6a4d719c0a
7
+ data.tar.gz: 51686641189e11d6ba4209c1f1076c135f2d7ffa92180b3ba972535156ab108a82de59578f0958a431ac2cffe197eb850c4f5c875b1837fc97be54a33f4f7ca7
@@ -177,6 +177,38 @@ module Maestro
177
177
  #
178
178
  # The 2 second factor is there to allow slowly accumulating data to be sent out more regularly.
179
179
  if !@buffered_output.empty? && (!options[:buffer] || Time.now - @last_write_output > 2)
180
+ # Ensure the output is json-able.
181
+ # It seems some code doesn't wholly respect encoding rules. We've found some http responses that
182
+ # don't have the correct encoding, despite the response headers stating 'utf-8', etc. Same goes
183
+ # for shell output streams, that don't seem to respect the apps encoding.
184
+ # What this code does is to try to json encode the @buffered_output. First a direct conversion,
185
+ # if that fails, try to force-encoding to utf-8, if that fails, try to remove all chars with
186
+ # code > 127. If that fails - we gave it a good shot, and maybe just insert a 'redacted' string
187
+ # so at least the task doesn't fail :)
188
+ begin
189
+ @buffered_output.to_json
190
+ rescue Exception
191
+ begin
192
+ test = @buffered_output
193
+ test.force_encoding('UTF-8')
194
+ test.to_json
195
+ # If forcing encoding worked, updated buffered_output
196
+ Maestro.log.warn("Had to force encoding to utf-8 for workitem stream")
197
+ @buffered_output = test
198
+ rescue Exception
199
+ begin
200
+ test = @buffered_output.gsub(/[^\x00-\x7f]/, '?')
201
+ test.to_json
202
+ # If worked, updated buffered_output
203
+ Maestro.log.warn("Had to strip top-bit-set chars for workitem stream")
204
+ @buffered_output = test
205
+ rescue Exception
206
+ Maestro.log.warn("Had to redact block of output, unable to 'to_json' it for workitem stream")
207
+ @buffered_output = '?_?'
208
+ end
209
+ end
210
+ end
211
+
180
212
  if !MaestroWorker.mock?
181
213
  workitem[OUTPUT_META] = @buffered_output
182
214
  else
@@ -1,5 +1,5 @@
1
1
  module Maestro
2
2
  module Plugin
3
- VERSION = '0.0.18'
3
+ VERSION = '0.0.19'
4
4
  end
5
5
  end
@@ -62,6 +62,21 @@ describe Maestro::MaestroWorker do
62
62
  subject.workitem['__streaming__'].should be_nil
63
63
  end
64
64
 
65
+ it 'should handle non utf-8 strings with funky characters (complete failure)' do
66
+ text = "\x8f"
67
+ text.force_encoding("US-ASCII")
68
+ subject.write_output(text)
69
+ subject.workitem['__output__'].should eql("?_?")
70
+ end
71
+
72
+ it 'should handle non utf-8 strings with funky characters (partial failure)' do
73
+ text = "missing \xc3\xa9"
74
+ text = text.force_encoding("ASCII-8BIT")
75
+ expect { text.to_json}.to raise_exception(Encoding::ConverterNotFoundError)
76
+ subject.write_output(text)
77
+ subject.workitem['__output__'].should eql("missing \u00E9")
78
+ end
79
+
65
80
  it 'should send a not needed message' do
66
81
  subject.not_needed
67
82
  subject.workitem['__not_needed__'].should be_nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maestro_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Etienne Pelletier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-20 00:00:00.000000000 Z
11
+ date: 2013-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logging