spec/inputs/graphite_spec.rb in logstash-input-graphite-2.0.1 vs spec/inputs/graphite_spec.rb in logstash-input-graphite-2.0.2
- old
+ new
@@ -1,75 +1,150 @@
require "logstash/devutils/rspec/spec_helper"
+require "logstash/inputs/graphite"
+require "logstash/timestamp"
+require "time"
+require_relative "../spec_helper"
+
+describe LogStash::Inputs::Graphite do
+
+ before do
+ srand(RSpec.configuration.seed)
+ end
+
+ let(:host) { "127.0.0.1" }
+ let(:port) { rand(1024..65535) }
+ let(:queue) { [] }
+ let(:client) { Stud::try(5.times) { TCPSocket.new(host, port) } }
+ let!(:helper) { TcpHelpers.new }
+
+ subject { LogStash::Inputs::Graphite.new("host" => host, "port" => port) }
+
+ after :each do
+ subject.close rescue nil
+ end
+
+ describe "register" do
+ it "should register without errors" do
+ expect { subject.register }.to_not raise_error
+ end
+ end
+
+ describe "receive" do
+
+ before(:each) do
+ subject.register
+ end
+
+ it "should parse a graphite message" do
+ result = helper.pipelineless_input(subject, 1) do
+ client.write "a.b.c 10 N\n"
+ end
+ expect(result.size).to eq(1)
+ expect(result.first.to_hash).to include({"a.b.c" => 10})
+ end
+
+ it "should parse a graphite message with floats" do
+ result = helper.pipelineless_input(subject, 1) do
+ client.write "a.b.c 10.2 N\n"
+ end
+ expect(result.size).to eq(1)
+ expect(result.first.to_hash).to include({"a.b.c" => 10.2})
+ end
+
+ it "should support using N as current timestamp" do
+ time = LogStash::Timestamp.new(Time.now)
+ expect(Time).to receive(:now) { time }
+ result = helper.pipelineless_input(subject, 1) do
+ client.write "a.b.c 10 N\n"
+ end
+ expect(result.size).to eq(1)
+ expect(result.first["@timestamp"]).to eq(time)
+ end
+
+ it "should support using N as current timestamp" do
+ time = Time.at(Time.now.to_i) # truncate at the second
+ result = helper.pipelineless_input(subject, 1) do
+ client.write "a.b.c 10 #{time.to_i}\n"
+ end
+ expect(result.size).to eq(1)
+ expect(result.first["@timestamp"]).to eq(LogStash::Timestamp.new(time))
+ end
+ end
+
+ it_behaves_like "an interruptible input plugin" do
+ let(:config) { { "port" => port } }
+ end
+end