logstash-core 2.1.3-java → 2.2.0-java

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of logstash-core might be problematic. Click here for more details.

Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/logstash-core.rb +1 -3
  3. data/lib/logstash-core/logstash-core.rb +3 -0
  4. data/lib/logstash-core/version.rb +8 -0
  5. data/lib/logstash/agent.rb +48 -20
  6. data/lib/logstash/codecs/base.rb +2 -2
  7. data/lib/logstash/config/config_ast.rb +8 -3
  8. data/lib/logstash/environment.rb +0 -16
  9. data/lib/logstash/filters/base.rb +9 -5
  10. data/lib/logstash/inputs/base.rb +1 -1
  11. data/lib/logstash/output_delegator.rb +150 -0
  12. data/lib/logstash/outputs/base.rb +37 -40
  13. data/lib/logstash/pipeline.rb +259 -178
  14. data/lib/logstash/pipeline_reporter.rb +114 -0
  15. data/lib/logstash/plugin.rb +1 -1
  16. data/lib/logstash/{shutdown_controller.rb → shutdown_watcher.rb} +10 -37
  17. data/lib/logstash/util.rb +17 -0
  18. data/lib/logstash/util/decorators.rb +14 -7
  19. data/lib/logstash/util/worker_threads_default_printer.rb +4 -4
  20. data/lib/logstash/util/wrapped_synchronous_queue.rb +41 -0
  21. data/lib/logstash/version.rb +10 -2
  22. data/locales/en.yml +8 -3
  23. data/logstash-core.gemspec +5 -3
  24. data/spec/{core/conditionals_spec.rb → conditionals_spec.rb} +0 -0
  25. data/spec/{core/config_spec.rb → logstash/config/config_ast_spec.rb} +0 -0
  26. data/spec/{core/config_cpu_core_strategy_spec.rb → logstash/config/cpu_core_strategy_spec.rb} +0 -0
  27. data/spec/{core/config_defaults_spec.rb → logstash/config/defaults_spec.rb} +0 -0
  28. data/spec/{core/config_mixin_spec.rb → logstash/config/mixin_spec.rb} +0 -0
  29. data/spec/{core → logstash}/environment_spec.rb +0 -0
  30. data/spec/{filters → logstash/filters}/base_spec.rb +0 -0
  31. data/spec/{inputs → logstash/inputs}/base_spec.rb +0 -0
  32. data/spec/{lib/logstash → logstash}/java_integration_spec.rb +0 -0
  33. data/spec/{util → logstash}/json_spec.rb +0 -0
  34. data/spec/logstash/output_delegator_spec.rb +126 -0
  35. data/spec/logstash/outputs/base_spec.rb +40 -0
  36. data/spec/logstash/pipeline_reporter_spec.rb +85 -0
  37. data/spec/{core → logstash}/pipeline_spec.rb +128 -16
  38. data/spec/{core → logstash}/plugin_spec.rb +47 -1
  39. data/spec/logstash/runner_spec.rb +68 -0
  40. data/spec/{core/shutdown_controller_spec.rb → logstash/shutdown_watcher_spec.rb} +17 -11
  41. data/spec/{util → logstash/util}/buftok_spec.rb +0 -0
  42. data/spec/{util → logstash/util}/charset_spec.rb +0 -0
  43. data/spec/{util → logstash/util}/defaults_printer_spec.rb +4 -4
  44. data/spec/{util → logstash/util}/java_version_spec.rb +0 -0
  45. data/spec/{util → logstash/util}/plugin_version_spec.rb +0 -0
  46. data/spec/{util → logstash/util}/unicode_trimmer_spec.rb +0 -0
  47. data/spec/{util → logstash/util}/worker_threads_default_printer_spec.rb +8 -8
  48. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +28 -0
  49. data/spec/{util_spec.rb → logstash/util_spec.rb} +0 -0
  50. metadata +74 -81
  51. data/lib/logstash/event.rb +0 -275
  52. data/lib/logstash/patches/bundler.rb +0 -36
  53. data/lib/logstash/sized_queue.rb +0 -8
  54. data/lib/logstash/string_interpolation.rb +0 -140
  55. data/lib/logstash/timestamp.rb +0 -97
  56. data/lib/logstash/util/accessors.rb +0 -123
  57. data/spec/core/event_spec.rb +0 -518
  58. data/spec/core/runner_spec.rb +0 -40
  59. data/spec/core/timestamp_spec.rb +0 -84
  60. data/spec/coverage_helper.rb +0 -24
  61. data/spec/lib/logstash/bundler_spec.rb +0 -121
  62. data/spec/license_spec.rb +0 -67
  63. data/spec/outputs/base_spec.rb +0 -26
  64. data/spec/plugin_manager/install_spec.rb +0 -28
  65. data/spec/plugin_manager/update_spec.rb +0 -39
  66. data/spec/plugin_manager/util_spec.rb +0 -71
  67. data/spec/spec_helper.rb +0 -11
  68. data/spec/util/accessors_spec.rb +0 -170
  69. data/spec/util/compress_spec.rb +0 -121
  70. data/spec/util/gemfile_spec.rb +0 -212
  71. data/spec/util/retryable_spec.rb +0 -139
@@ -1,40 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
- require "logstash/runner"
4
- require "stud/task"
5
-
6
- class NullRunner
7
- def run(args); end
8
- end
9
-
10
- describe LogStash::Runner do
11
-
12
- context "argument parsing" do
13
- it "should run agent" do
14
- expect(Stud::Task).to receive(:new).once.and_return(nil)
15
- args = ["agent", "-e", ""]
16
- expect(subject.run(args)).to eq(nil)
17
- end
18
-
19
- it "should run agent help" do
20
- expect(subject).to receive(:show_help).once.and_return(nil)
21
- args = ["agent", "-h"]
22
- expect(subject.run(args).wait).to eq(0)
23
- end
24
-
25
- it "should show help with no arguments" do
26
- expect($stderr).to receive(:puts).once.and_return("No command given")
27
- expect($stderr).to receive(:puts).once
28
- args = []
29
- expect(subject.run(args).wait).to eq(1)
30
- end
31
-
32
- it "should show help for unknown commands" do
33
- expect($stderr).to receive(:puts).once.and_return("No such command welp")
34
- expect($stderr).to receive(:puts).once
35
- args = ["welp"]
36
- expect(subject.run(args).wait).to eq(1)
37
- end
38
-
39
- end
40
- end
@@ -1,84 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
- require "logstash/timestamp"
4
-
5
- describe LogStash::Timestamp do
6
-
7
- it "should parse its own iso8601 output" do
8
- t = Time.now
9
- ts = LogStash::Timestamp.new(t)
10
- expect(LogStash::Timestamp.parse_iso8601(ts.to_iso8601).to_i).to eq(t.to_i)
11
- end
12
-
13
- it "should coerce iso8601 string" do
14
- t = Time.now
15
- ts = LogStash::Timestamp.new(t)
16
- expect(LogStash::Timestamp.coerce(ts.to_iso8601).to_i).to eq(t.to_i)
17
- end
18
-
19
- it "should coerce Time" do
20
- t = Time.now
21
- expect(LogStash::Timestamp.coerce(t).to_i).to eq(t.to_i)
22
- end
23
-
24
- it "should coerce Timestamp" do
25
- t = LogStash::Timestamp.now
26
- expect(LogStash::Timestamp.coerce(t).to_i).to eq(t.to_i)
27
- end
28
-
29
- it "should raise on invalid string coerce" do
30
- expect{LogStash::Timestamp.coerce("foobar")}.to raise_error LogStash::TimestampParserError
31
- end
32
-
33
- it "should return nil on invalid object coerce" do
34
- expect(LogStash::Timestamp.coerce(:foobar)).to be_nil
35
- end
36
-
37
- it "should support to_json" do
38
- expect(LogStash::Timestamp.parse_iso8601("2014-09-23T00:00:00-0800").to_json).to eq("\"2014-09-23T08:00:00.000Z\"")
39
- end
40
-
41
- it "should support to_json and ignore arguments" do
42
- expect(LogStash::Timestamp.parse_iso8601("2014-09-23T00:00:00-0800").to_json(:some => 1, :argumnents => "test")).to eq("\"2014-09-23T08:00:00.000Z\"")
43
- end
44
-
45
- it "should support timestamp comparaison" do
46
- current = LogStash::Timestamp.new(Time.now)
47
- future = LogStash::Timestamp.new(Time.now + 100)
48
-
49
- expect(future > current).to eq(true)
50
- expect(future < current).to eq(false)
51
- expect(current == current).to eq(true)
52
-
53
- expect(current <=> current).to eq(0)
54
- expect(current <=> future).to eq(-1)
55
- expect(future <=> current).to eq(1)
56
- end
57
-
58
- it "should allow unary operation +" do
59
- current = Time.now
60
- t = LogStash::Timestamp.new(current) + 10
61
- expect(t).to eq(current + 10)
62
- end
63
-
64
- describe "subtraction" do
65
- it "should work on a timestamp object" do
66
- t = Time.now
67
- current = LogStash::Timestamp.new(t)
68
- future = LogStash::Timestamp.new(t + 10)
69
- expect(future - current).to eq(10)
70
- end
71
-
72
- it "should work on with time object" do
73
- current = Time.now
74
- t = LogStash::Timestamp.new(current + 10)
75
- expect(t - current).to eq(10)
76
- end
77
-
78
- it "should work with numeric value" do
79
- current = Time.now
80
- t = LogStash::Timestamp.new(current + 10)
81
- expect(t - 10).to eq(current)
82
- end
83
- end
84
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- # Useful module to help loading all logstash content when
3
- # running coverage analysis
4
- module CoverageHelper
5
-
6
- ##
7
- # Skip list used to avoid loading certain patterns within
8
- # the logstash directories, this patterns are excluded becuause
9
- # of potential problems or because they are going to be loaded
10
- # in another way.
11
- ##
12
- SKIP_LIST = Regexp.union([
13
- /^lib\/bootstrap\/rspec.rb$/,
14
- /^lib\/logstash\/util\/prctl.rb$/
15
- ])
16
-
17
- def self.eager_load
18
- Dir.glob("lib/**/*.rb") do |file|
19
- next if file =~ SKIP_LIST
20
- require file
21
- end
22
- end
23
-
24
- end
@@ -1,121 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
- require "bundler/cli"
4
-
5
- describe LogStash::Bundler do
6
- context "capture_stdout" do
7
- it "should capture stdout from block" do
8
- original_stdout = $stdout
9
- output, exception = LogStash::Bundler.capture_stdout do
10
- expect($stdout).not_to eq(original_stdout)
11
- puts("foobar")
12
- end
13
- expect($stdout).to eq(original_stdout)
14
- expect(output).to eq("foobar\n")
15
- expect(exception).to eq(nil)
16
- end
17
-
18
- it "should capture stdout and report exception from block" do
19
- output, exception = LogStash::Bundler.capture_stdout do
20
- puts("foobar")
21
- raise(StandardError, "baz")
22
- end
23
- expect(output).to eq("foobar\n")
24
- expect(exception).to be_a(StandardError)
25
- expect(exception.message).to eq("baz")
26
- end
27
- end
28
-
29
- context 'when invoking bundler' do
30
- original_stderr = $stderr
31
-
32
- subject { LogStash::Bundler.invoke!(options) }
33
-
34
- # by default we want to fail fast on the test
35
- let(:options) { { :install => true, :max_tries => 0, :without => [:development]} }
36
- let(:bundler_args) { LogStash::Bundler.bundler_arguments(options) }
37
-
38
- before do
39
- $stderr = StringIO.new
40
-
41
- expect(::Bundler).to receive(:reset!).at_least(1)
42
- end
43
-
44
- after do
45
- expect(::Bundler.settings[:path]).to eq(LogStash::Environment::BUNDLE_DIR)
46
- expect(::Bundler.settings[:gemfile]).to eq(LogStash::Environment::GEMFILE_PATH)
47
- expect(::Bundler.settings[:without]).to eq(options.fetch(:without, []).join(':'))
48
-
49
- expect(ENV['GEM_PATH']).to eq(LogStash::Environment.logstash_gem_home)
50
-
51
- $stderr = original_stderr
52
- end
53
-
54
- it 'should call Bundler::CLI.start with the correct arguments' do
55
- expect(::Bundler::CLI).to receive(:start).with(bundler_args)
56
- LogStash::Bundler.invoke!(options)
57
- end
58
-
59
- context 'abort with an exception' do
60
- it 'gem conflict' do
61
- allow(::Bundler::CLI).to receive(:start).with(bundler_args) { raise ::Bundler::VersionConflict.new('conflict') }
62
- expect { subject }.to raise_error(::Bundler::VersionConflict)
63
- end
64
-
65
- it 'gem is not found' do
66
- allow(::Bundler::CLI).to receive(:start).with(bundler_args) { raise ::Bundler::GemNotFound.new('conflict') }
67
- expect { subject }.to raise_error(::Bundler::GemNotFound)
68
- end
69
-
70
- it 'on max retries' do
71
- options.merge!({ :max_tries => 2 })
72
- expect(::Bundler::CLI).to receive(:start).with(bundler_args).at_most(options[:max_tries] + 1) { raise RuntimeError }
73
- expect { subject }.to raise_error(RuntimeError)
74
- end
75
- end
76
- end
77
-
78
- context 'when generating bundler arguments' do
79
- subject { LogStash::Bundler.bundler_arguments(options) }
80
- let(:options) { {} }
81
-
82
- context 'when installing' do
83
- let(:options) { { :install => true } }
84
-
85
- it 'should call bundler install' do
86
- expect(subject).to include('install')
87
- end
88
-
89
- context 'with the cleaning option' do
90
- it 'should add the --clean arguments' do
91
- options.merge!(:clean => true)
92
- expect(subject).to include('install','--clean')
93
- end
94
- end
95
- end
96
-
97
- context "when updating" do
98
- let(:options) { { :update => 'logstash-input-stdin' } }
99
-
100
- context 'with a specific plugin' do
101
- it 'should call `bundle update plugin-name`' do
102
- expect(subject).to include('update', 'logstash-input-stdin')
103
- end
104
- end
105
-
106
- context 'with the cleaning option' do
107
- it 'should ignore the clean option' do
108
- options.merge!(:clean => true)
109
- expect(subject).not_to include('--clean')
110
- end
111
- end
112
- end
113
-
114
- context "when only specifying clean" do
115
- let(:options) { { :clean => true } }
116
- it 'should call the `bundle clean`' do
117
- expect(subject).to include('clean')
118
- end
119
- end
120
- end
121
- end
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
- require 'rakelib/default_plugins'
4
-
5
- describe "Project licenses" do
6
-
7
- let(:expected_licenses) {
8
- ##
9
- # Expected licenses are Apache License 2.0, BSD license, MIT license and the ruby one,
10
- # this not exclude that this list change in the feature.
11
- ##
12
- Regexp.union([ /mit/,
13
- /apache*/,
14
- /bsd/,
15
- /artistic 2.*/,
16
- /ruby/,
17
- /lgpl/])
18
- }
19
-
20
- ##
21
- # This licenses are skipped from the license test of many reasons, check
22
- # the exact dependency for detailed information.
23
- ##
24
- let(:skipped_dependencies) do
25
- [
26
- # Skipped because of already included and bundled within JRuby so checking here is redundant.
27
- # Need to take action about jruby licenses to enable again or keep skeeping.
28
- "jruby-openssl"
29
- ]
30
- end
31
-
32
- shared_examples "runtime license test" do
33
-
34
- subject(:gem_name) do |example|
35
- example.metadata[:example_group][:parent_example_group][:description]
36
- end
37
-
38
- let(:spec) { Gem::Specification.find_all_by_name(gem_name)[0] }
39
-
40
- it "have an expected license" do
41
- spec.licenses.each do |license|
42
- expect(license.downcase).to match(expected_licenses)
43
- end
44
- end
45
-
46
- it "has runtime dependencies with expected licenses" do
47
- spec.runtime_dependencies.map { |dep| dep.to_spec }.each do |runtime_spec|
48
- next unless runtime_spec
49
- next if skipped_dependencies.include?(runtime_spec.name)
50
- runtime_spec.licenses.each do |license|
51
- expect(license.downcase).to match(expected_licenses)
52
- end
53
- end
54
- end
55
- end
56
-
57
- describe "logstash-core" do
58
- it_behaves_like "runtime license test"
59
- end
60
-
61
- installed_plugins.each do |plugin|
62
- describe plugin do
63
- it_behaves_like "runtime license test"
64
- end
65
- end
66
-
67
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
-
4
- # use a dummy NOOP output to test Outputs::Base
5
- class LogStash::Outputs::NOOP < LogStash::Outputs::Base
6
- config_name "noop"
7
- milestone 2
8
-
9
- config :dummy_option, :validate => :string
10
-
11
- def register; end
12
-
13
- def receive(event)
14
- return output?(event)
15
- end
16
- end
17
-
18
- describe "LogStash::Outputs::Base#worker_setup" do
19
- it "should create workers using original parameters except workers = 1" do
20
- params = { "dummy_option" => "potatoes", "codec" => "json", "workers" => 2 }
21
- worker_params = params.dup; worker_params["workers"] = 1
22
- output = LogStash::Outputs::NOOP.new(params.dup)
23
- expect(LogStash::Outputs::NOOP).to receive(:new).twice.with(worker_params).and_call_original
24
- output.worker_setup
25
- end
26
- end
@@ -1,28 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
- require 'pluginmanager/main'
4
-
5
- describe LogStash::PluginManager::Install do
6
- let(:cmd) { LogStash::PluginManager::Install.new("install") }
7
-
8
- before(:each) do
9
- expect(cmd).to receive(:validate_cli_options!).and_return(nil)
10
- end
11
-
12
- context "when validating plugins" do
13
- let(:sources) { ["https://rubygems.org", "http://localhost:9292"] }
14
-
15
- before(:each) do
16
- expect(cmd).to receive(:plugins_gems).and_return([["dummy", nil]])
17
- expect(cmd).to receive(:install_gems_list!).and_return(nil)
18
- expect(cmd).to receive(:remove_unused_locally_installed_gems!).and_return(nil)
19
- cmd.verify = true
20
- end
21
-
22
- it "should load all the sources defined in the Gemfile" do
23
- expect(cmd.gemfile.gemset).to receive(:sources).and_return(sources)
24
- expect(LogStash::PluginManager).to receive(:logstash_plugin?).with("dummy", nil, {:rubygems_source => sources}).and_return(true)
25
- cmd.execute
26
- end
27
- end
28
- end
@@ -1,39 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
- require 'pluginmanager/main'
4
-
5
- describe LogStash::PluginManager::Update do
6
- let(:cmd) { LogStash::PluginManager::Update.new("update") }
7
- let(:sources) { cmd.gemfile.gemset.sources }
8
-
9
- before(:each) do
10
- expect(cmd).to receive(:find_latest_gem_specs).and_return({})
11
- allow(cmd).to receive(:warn_local_gems).and_return(nil)
12
- expect(cmd).to receive(:display_updated_plugins).and_return(nil)
13
- expect_any_instance_of(LogStash::Bundler).to receive(:invoke!).with(:clean => true)
14
- end
15
-
16
- it "pass all gem sources to the bundle update command" do
17
- sources = cmd.gemfile.gemset.sources
18
- expect_any_instance_of(LogStash::Bundler).to receive(:invoke!).with(:update => [], :rubygems_source => sources)
19
- cmd.execute
20
- end
21
-
22
- context "when skipping validation" do
23
- let(:cmd) { LogStash::PluginManager::Update.new("update") }
24
- let(:plugin) { OpenStruct.new(:name => "dummy", :options => {} ) }
25
-
26
- before(:each) do
27
- expect(cmd.gemfile).to receive(:find).with(plugin).and_return(plugin)
28
- expect(cmd.gemfile).to receive(:save).and_return(nil)
29
- expect(cmd).to receive(:plugins_to_update).and_return([plugin])
30
- expect_any_instance_of(LogStash::Bundler).to receive(:invoke!).with(:update => [plugin], :rubygems_source => sources).and_return(nil)
31
- end
32
-
33
- it "skips version verification when ask for it" do
34
- cmd.verify = false
35
- expect(cmd).to_not receive(:validates_version)
36
- cmd.execute
37
- end
38
- end
39
- end
@@ -1,71 +0,0 @@
1
- #encoding: utf-8
2
- require 'spec_helper'
3
- require 'pluginmanager/util'
4
- require 'gems'
5
-
6
- describe LogStash::PluginManager do
7
-
8
- describe "fetching plugin information" do
9
- let(:plugin_name) { "logstash-output-elasticsearch" }
10
-
11
- let(:version_data) do
12
- [ { "authors"=>"Elastic", "built_at"=>"2015-08-11T00:00:00.000Z", "description"=>"Output events to elasticsearch",
13
- "downloads_count"=>1638, "metadata"=>{"logstash_group"=>"output", "logstash_plugin"=>"true"}, "number"=>"2.0.0.pre",
14
- "summary"=>"Logstash Output to Elasticsearch", "platform"=>"java", "ruby_version"=>">= 0", "prerelease"=>true,
15
- "licenses"=>["apache-2.0"], "requirements"=>[], "sha"=>"194b27099c13605a882a3669e2363fdecccaab1de48dd44b0cda648dd5516799"},
16
- { "authors"=>"Elastic", "built_at"=>"2015-08-10T00:00:00.000Z", "description"=>"Output events to elasticsearch",
17
- "downloads_count"=>1638, "metadata"=>{"logstash_group"=>"output", "logstash_plugin"=>"true"}, "number"=>"1.0.7",
18
- "summary"=>"Logstash Output to Elasticsearch", "platform"=>"java", "ruby_version"=>">= 0", "prerelease"=>false,
19
- "licenses"=>["apache-2.0"], "requirements"=>[], "sha"=>"194b27099c13605a882a3669e2363fdecccaab1de48dd44b0cda648dd5516799"},
20
- { "authors"=>"Elastic", "built_at"=>"2015-08-09T00:00:00.000Z", "description"=>"Output events to elasticsearch",
21
- "downloads_count"=>1638, "metadata"=>{"logstash_group"=>"output", "logstash_plugin"=>"true"}, "number"=>"1.0.4",
22
- "summary"=>"Logstash Output to Elasticsearch", "platform"=>"java", "ruby_version"=>">= 0", "prerelease"=>false,
23
- "licenses"=>["apache-2.0"], "requirements"=>[], "sha"=>"194b27099c13605a882a3669e2363fdecccaab1de48dd44b0cda648dd5516799"} ]
24
- end
25
-
26
- before(:each) do
27
- allow(Gems).to receive(:versions).with(plugin_name).and_return(version_data)
28
- end
29
-
30
- context "fetch plugin info" do
31
- it "should search for the last version infomation non prerelease" do
32
- version_info = LogStash::PluginManager.fetch_latest_version_info(plugin_name)
33
- expect(version_info["number"]).to eq("1.0.7")
34
- end
35
-
36
-
37
- it "should search for the last version infomation with prerelease" do
38
- version_info = LogStash::PluginManager.fetch_latest_version_info(plugin_name, :pre => true)
39
- expect(version_info["number"]).to eq("2.0.0.pre")
40
- end
41
- end
42
- end
43
-
44
- describe "a logstash_plugin validation" do
45
- let(:plugin) { "foo" }
46
- let(:version) { "9.0.0.0" }
47
-
48
- let(:sources) { ["http://source.01", "http://source.02"] }
49
- let(:options) { {:rubygems_source => sources} }
50
-
51
- let(:gemset) { double("gemset") }
52
- let(:gemfile) { double("gemfile") }
53
- let(:dep) { double("dep") }
54
- let(:fetcher) { double("fetcher") }
55
-
56
- before(:each) do
57
- allow(gemfile).to receive(:gemset).and_return(gemset)
58
- allow(gemset).to receive(:sources).and_return(sources)
59
- expect(fetcher).to receive(:spec_for_dependency).and_return([[],[]])
60
- end
61
-
62
- it "should load all available sources" do
63
- expect(subject).to receive(:plugin_file?).and_return(false)
64
- expect(Gem::Dependency).to receive(:new).and_return(dep)
65
- expect(Gem::SpecFetcher).to receive(:fetcher).and_return(fetcher)
66
-
67
- subject.logstash_plugin?(plugin, version, options)
68
- expect(Gem.sources.map { |source| source }).to eq(sources)
69
- end
70
- end
71
- end