Add tests to ensure correct behavior of elasticsearch with our new

template settings.

Some of these tests fail at this time because our template is incorrect.
The template will be fixed shortly.
This commit is contained in:
Jordan Sissel 2013-12-16 14:48:18 -08:00
parent 0f00484fa2
commit 9a1b17efcd

View file

@ -158,4 +158,71 @@ describe "outputs/elasticsearch_http" do
end
end
end
describe "index template expected behavior" do
subject do
require "logstash/outputs/elasticsearch_http"
settings = {
"manage_template" => true,
"template_overwrite" => true,
"host" => "localhost"
}
Elasticsearch::Client.new.indices.delete_template(:name => "*")
output = LogStash::Outputs::ElasticSearchHTTP.new(settings)
output.register
next output
end
before :each do
require "elasticsearch"
@es = Elasticsearch::Client.new
@es.indices.delete
subject.receive(LogStash::Event.new("message" => "sample message here"))
subject.receive(LogStash::Event.new("somevalue" => 100))
subject.receive(LogStash::Event.new("somevalue" => 10))
subject.receive(LogStash::Event.new("somevalue" => 1))
subject.receive(LogStash::Event.new("geoip" => { "location" => [ 0.0, 0.0 ] }))
subject.buffer_flush(:final => true)
@es.indices.flush
# Wait or fail until everything's indexed.
Stud::try(10.times) do
r = @es.search
insist { r["hits"]["total"] } == 5
end
end
it "permits phrase searching on string fields" do
results = @es.search(:q => "message:\"sample message\"")
insist { results["hits"]["total"] } == 1
insist { results["hits"]["hits"][0]["_source"]["message"] } == "sample message here"
end
it "numbers dynamically map to a numeric type and permit range queries" do
results = @es.search(:q => "somevalue:[5 TO 105]")
insist { results["hits"]["total"] } == 2
values = results["hits"]["hits"].collect { |r| r["_source"]["somevalue"] }
insist { values }.include?(10)
insist { values }.include?(100)
reject { values }.include?(1)
end
it "creates .raw field fro any string field which is not_analyzed" do
results = @es.search(:q => "message.raw:\"sample message here\"")
insist { results["hits"]["total"] } == 1
insist { results["hits"]["hits"][0]["_source"]["message"] } == "sample message here"
# partial or terms should not work.
results = @es.search(:q => "message.raw:\"sample\"")
insist { results["hits"]["total"] } == 0
end
it "make [geoip][location] a geo_point" do
results = @es.search(:body => { "filter" => { "geo_distance" => { "distance" => "1000km", "geoip.location" => { "lat" => 0.5, "long" => 0.5 } } } })
insist { results["hits"]["total"] } == 1
insist { results["hits"]["hits"][0]["_source"]["geoip"]["location"] } == [ 0.0, 0.0 ]
end
end
end