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 +4 -4
- data/CHANGELOG.md +7 -0
- data/VERSION +1 -1
- data/lib/threatinator/feed_runner.rb +3 -0
- data/lib/threatinator/fetchers/http.rb +4 -1
- data/spec/threatinator/feed_runner_spec.rb +39 -6
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c81010e688cdc072a3e286d26351ba6fbd072c27
|
4
|
+
data.tar.gz: 71e81855bf912c6f4a00d41132f8c2d4519595b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57dfb246807ee9e41f26ca523776fa153aab31d691020735cbd6541d201438c61c451686e8f8482e537853c5984690822ee4f8b90ce53f6c79c31b4f6582e34f
|
7
|
+
data.tar.gz: 3ec22b736c98134ffdd835e446c906f51106b954af4062d8626c2dca3229de8d7fa2cf4eeb0c73fe001ac3db67ad854302e0067d78e2f1453defa6af5859c4d3
|
data/CHANGELOG.md
CHANGED
@@ -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.
|
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,
|
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') }
|