mirror of
https://github.com/elastic/logstash.git
synced 2025-04-24 22:57:16 -04:00
212 lines
5.9 KiB
Ruby
212 lines
5.9 KiB
Ruby
# encoding: utf-8
|
|
require "spec_helper"
|
|
require "pluginmanager/gemfile"
|
|
|
|
describe "logstash Gemfile Manager" do
|
|
|
|
context LogStash::Gemfile do
|
|
|
|
context "load" do
|
|
|
|
it "should load and return self" do
|
|
file = <<-END
|
|
source "https://rubygems.org"
|
|
gemspec :a => "a"
|
|
gem "test", "> 1.0", "< 2.0", :b => "b"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
expect(gemfile).to be_an(LogStash::Gemfile)
|
|
end
|
|
|
|
it "should add sources" do
|
|
file = <<-END
|
|
source "a"
|
|
source "b"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
expect(gemfile.gemset.sources.size).to eq(2)
|
|
expect(gemfile.gemset.sources).to eq(["a", "b"])
|
|
end
|
|
|
|
it "should add gemspec" do
|
|
file = <<-END
|
|
gemspec "foo"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
expect(gemfile.gemset.gemspec).to eq("foo")
|
|
end
|
|
|
|
it "should raise on multiple gemspec" do
|
|
file = <<-END
|
|
gemspec "foo"
|
|
gemspec "boom"
|
|
END
|
|
|
|
expect{LogStash::Gemfile.new(StringIO.new(file)).load}.to raise_error(LogStash::GemfileError)
|
|
end
|
|
|
|
it "should add gems" do
|
|
file = <<-END
|
|
gem "foo"
|
|
gem "bar"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
expect(gemfile.gemset.gems.size).to eq(2)
|
|
expect(gemfile.gemset.gems[0].name).to eq("foo")
|
|
expect(gemfile.gemset.gems[1].name).to eq("bar")
|
|
end
|
|
|
|
it "should raise on duplicate gem name" do
|
|
file = <<-END
|
|
gem "foo"
|
|
gem "foo"
|
|
END
|
|
|
|
expect{LogStash::Gemfile.new(StringIO.new(file)).load}.to raise_error(LogStash::GemfileError)
|
|
end
|
|
|
|
it "should add gems with only name" do
|
|
file = <<-END
|
|
gem "foo"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
|
|
expect(gemfile.gemset.gems[0].name).to eq("foo")
|
|
expect(gemfile.gemset.gems[0].requirements.empty?).to eq(true)
|
|
expect(gemfile.gemset.gems[0].options.empty?).to eq(true)
|
|
end
|
|
|
|
it "should add gems with name and requirements" do
|
|
file = <<-END
|
|
gem "foo", "a"
|
|
gem "bar", "a", "b"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
|
|
expect(gemfile.gemset.gems[0].name).to eq("foo")
|
|
expect(gemfile.gemset.gems[0].requirements).to eq(["a"])
|
|
expect(gemfile.gemset.gems[0].options.empty?).to eq(true)
|
|
|
|
expect(gemfile.gemset.gems[1].name).to eq("bar")
|
|
expect(gemfile.gemset.gems[1].requirements).to eq(["a", "b"])
|
|
expect(gemfile.gemset.gems[1].options.empty?).to eq(true)
|
|
end
|
|
|
|
it "should add gems with name and options" do
|
|
file = <<-END
|
|
gem "foo", :a => "a"
|
|
gem "bar", :a => "a", :b => "b"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
|
|
expect(gemfile.gemset.gems[0].name).to eq("foo")
|
|
expect(gemfile.gemset.gems[0].requirements.empty?).to eq(true)
|
|
expect(gemfile.gemset.gems[0].options).to eq({:a => "a"})
|
|
|
|
expect(gemfile.gemset.gems[1].name).to eq("bar")
|
|
expect(gemfile.gemset.gems[1].requirements.empty?).to eq(true)
|
|
expect(gemfile.gemset.gems[1].options).to eq({:a => "a", :b => "b"})
|
|
end
|
|
|
|
it "should add gems with name, requirements and options" do
|
|
file = <<-END
|
|
gem "foo", "> 1.0", :b => "b"
|
|
gem "bar", "> 2.0", "< 3.0", :c => "c", :d => "d"
|
|
END
|
|
|
|
gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
|
|
expect(gemfile.gemset.gems.size).to eq(2)
|
|
|
|
expect(gemfile.gemset.gems[0].name).to eq("foo")
|
|
expect(gemfile.gemset.gems[0].requirements).to eq(["> 1.0"])
|
|
expect(gemfile.gemset.gems[0].options).to eq({:b => "b"})
|
|
|
|
expect(gemfile.gemset.gems[1].name).to eq("bar")
|
|
expect(gemfile.gemset.gems[1].requirements).to eq(["> 2.0", "< 3.0"])
|
|
expect(gemfile.gemset.gems[1].options).to eq({:c => "c", :d => "d"})
|
|
end
|
|
end
|
|
|
|
describe "Locally installed gems" do
|
|
subject { LogStash::Gemfile.new(StringIO.new(file)).load.locally_installed_gems }
|
|
|
|
context "has gems defined with a path" do
|
|
let(:file) {
|
|
%Q[
|
|
source "https://rubygems.org"
|
|
gemspec :a => "a", "b" => 1
|
|
gem "foo", "> 1.0", :path => "/tmp/foo"
|
|
gem "bar", :path => "/tmp/bar"
|
|
gem "no-fun"
|
|
]
|
|
}
|
|
|
|
it "returns the list of gems" do
|
|
expect(subject.collect(&:name)).to eq(["foo", "bar"])
|
|
end
|
|
end
|
|
|
|
context "no gems defined with a path" do
|
|
let(:file) {
|
|
%Q[
|
|
source "https://rubygems.org"
|
|
gemspec :a => "a", "b" => 1
|
|
gem "no-fun"
|
|
]
|
|
}
|
|
|
|
it "return an empty list" do
|
|
expect(subject.size).to eq(0)
|
|
end
|
|
end
|
|
|
|
context "keep a backup of the original file" do
|
|
|
|
end
|
|
end
|
|
|
|
context "save" do
|
|
it "should save" do
|
|
file = <<-END
|
|
source "https://rubygems.org"
|
|
gemspec :a => "a", "b" => 1
|
|
gem "foo", "> 1.0", "< 2.0", :b => "b"
|
|
gem "bar"
|
|
END
|
|
|
|
io = StringIO.new(file)
|
|
gemfile = LogStash::Gemfile.new(io).load
|
|
gemfile.save
|
|
expect(file).to eq(
|
|
LogStash::Gemfile::HEADER + \
|
|
"source \"https://rubygems.org\"\n" + \
|
|
"gemspec :a => \"a\", \"b\" => 1\n" + \
|
|
"gem \"foo\", \"> 1.0\", \"< 2.0\", :b => \"b\"\n" + \
|
|
"gem \"bar\"\n"
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
context LogStash::DSL do
|
|
context "parse" do
|
|
it "should parse Gemfile content string" do
|
|
gemfile = <<-END
|
|
source "https://rubygems.org"
|
|
gemspec
|
|
gem "foo"
|
|
END
|
|
|
|
gemset = LogStash::DSL.parse(gemfile)
|
|
expect(gemset).to be_an(LogStash::Gemset)
|
|
end
|
|
end
|
|
end
|
|
end
|