threatinator 0.2.0 → 0.2.1
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.
- 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') }
|