threatinator 0.2.0 → 0.2.1

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: 49782ab8639faa3f2f202e056f780b6fdeff09df
4
- data.tar.gz: d2f4fb0ed1056f32f6509a9b8f1a9740170cc2c1
3
+ metadata.gz: c81010e688cdc072a3e286d26351ba6fbd072c27
4
+ data.tar.gz: 71e81855bf912c6f4a00d41132f8c2d4519595b2
5
5
  SHA512:
6
- metadata.gz: 4e4b0f2c3686572067acee715834addb78cd66fc7d718a5208506fc9ae9b676037ae13d18b9bf2e33d4a9230a345aab00ad50ba1841b92f1d154be5f3800fd01
7
- data.tar.gz: c3b15041ad98b6da912de32b90e540a9634572222158d62503734c324d0eec3870b763d371b16abf88d413b74c6d412899bf4e4d3dd8e006a5d32eaa6d593f40
6
+ metadata.gz: 57dfb246807ee9e41f26ca523776fa153aab31d691020735cbd6541d201438c61c451686e8f8482e537853c5984690822ee4f8b90ce53f6c79c31b4f6582e34f
7
+ data.tar.gz: 3ec22b736c98134ffdd835e446c906f51106b954af4062d8626c2dca3229de8d7fa2cf4eeb0c73fe001ac3db67ad854302e0067d78e2f1453defa6af5859c4d3
@@ -3,6 +3,13 @@ Next
3
3
 
4
4
  * Your contribution here.
5
5
 
6
+ 0.2.1
7
+ ====
8
+ * Ensure that FeedRunner calls output formatters #finish method (allows for
9
+ closing of any file handles) - [@justfalter](https://github.com/justfalter)
10
+ * Ensure that HTTP fetcher does not reuse sockets (and thus leave them open) - [@justfalter](https://github.com/justfalter)
11
+
12
+
6
13
  0.2.0
7
14
  ====
8
15
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -109,11 +109,14 @@ module Threatinator
109
109
  begin
110
110
  some_io.close
111
111
  rescue => e
112
+ #:nocov:
112
113
  logger.warn("Failed to close IO: #{e} #{e.message}")
114
+ #:nocov:
113
115
  end
114
116
  end
115
117
  end
116
118
 
119
+ @output_formatter.finish
117
120
  end
118
121
 
119
122
  def create_event
@@ -24,7 +24,10 @@ module Threatinator
24
24
  # @raise [Threatinator::Exceptions::FetchFailed] if the fetch fails
25
25
  def fetch
26
26
  tempfile = Tempfile.new("threatinator_http")
27
- request = Typhoeus::Request.new(@url, ssl_verifypeer: false)
27
+ request = Typhoeus::Request.new(@url,
28
+ ssl_verifypeer: false,
29
+ forbid_reuse: true
30
+ )
28
31
  request.on_headers do |response|
29
32
  if response.response_code != 200
30
33
 
@@ -133,12 +133,6 @@ describe Threatinator::FeedRunner do
133
133
  expect(observer.updates.first).to eq([:start])
134
134
  end
135
135
 
136
- it "closes the last IO instance" do
137
- allow(fetcher).to receive(:fetch).and_return(io)
138
- expect(io).to receive(:close)
139
- feed_runner.run()
140
- end
141
-
142
136
  it "fetches, decodes, and then parses records" do
143
137
  expect(observer).to receive(:update).with(:start).ordered
144
138
  expect(observer).to receive(:update).with(:start_fetch).ordered
@@ -297,6 +291,45 @@ describe Threatinator::FeedRunner do
297
291
  end
298
292
  end
299
293
 
294
+ context "cleanup" do
295
+ it "closes the IO provided via :io" do
296
+ expect(io).to receive(:closed?).and_return(false)
297
+ expect(io).to receive(:close)
298
+ feed_runner.run(:io => io)
299
+ end
300
+
301
+ it "closes the IO returned by the fetcher" do
302
+ allow(fetcher).to receive(:fetch).and_return(io)
303
+ expect(io).to receive(:closed?).and_return(false)
304
+ expect(io).to receive(:close)
305
+ feed_runner.run
306
+ end
307
+
308
+ it "calls output_formatter.finish" do
309
+ expect(output_formatter).to receive(:finish)
310
+ feed_runner.run
311
+ end
312
+
313
+ context "when handling a chain of IOs created by decoders" do
314
+ let(:decoded_io1) { create_mock_io('decoded_io1') }
315
+ let(:decoded_io2) { create_mock_io('decoded_io2') }
316
+ let(:decoded_io3) { create_mock_io('decoded_io3') }
317
+ let(:decoder1) { DummyDecoder.new(decoded_io1) }
318
+ let(:decoder2) { DummyDecoder.new(decoded_io2) }
319
+ let(:decoder3) { DummyDecoder.new(decoded_io3) }
320
+ let(:decoders) { [ decoder1, decoder2, decoder3 ] }
321
+ it "closes each decoded IO at the end" do
322
+ expect(decoded_io1).to receive(:closed?).and_return(false)
323
+ expect(decoded_io1).to receive(:close)
324
+ expect(decoded_io2).to receive(:closed?).and_return(false)
325
+ expect(decoded_io2).to receive(:close)
326
+ expect(decoded_io3).to receive(:closed?).and_return(false)
327
+ expect(decoded_io3).to receive(:close)
328
+ feed_runner.run
329
+ end
330
+ end
331
+ end
332
+
300
333
  context "decoding" do
301
334
  let(:decoded_io1) { create_mock_io('decoded_io1') }
302
335
  let(:decoded_io2) { create_mock_io('decoded_io2') }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: threatinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Ryan