diff --git a/lib/logstash/inputs/file.rb b/lib/logstash/inputs/file.rb index 86703fb5a..dfb6f1f8e 100644 --- a/lib/logstash/inputs/file.rb +++ b/lib/logstash/inputs/file.rb @@ -1,7 +1,9 @@ require "logstash/inputs/base" require "logstash/namespace" + require "socket" # for Socket.gethostname -require "uri" + +require "addressable/uri" # Stream events from files. # @@ -68,7 +70,7 @@ class LogStash::Inputs::File < LogStash::Inputs::Base hostname = Socket.gethostname tail.subscribe do |path, line| - source = URI::Generic.new("file", nil, hostname, nil, nil, path, nil, nil, nil).to_s + source = Addressable::URI.new(:scheme => "file", :host => hostname, :path => path).to_s @logger.debug("Received line", :path => path, :line => line) e = to_event(line, source) if e diff --git a/test/logstash/inputs/test_file.rb b/test/logstash/inputs/test_file.rb index 53e9332f3..08717cc91 100644 --- a/test/logstash/inputs/test_file.rb +++ b/test/logstash/inputs/test_file.rb @@ -9,7 +9,51 @@ require "logstash/inputs/file" require "tempfile" +require "mocha" + describe LogStash::Inputs::File do + + test "file input sets source properly for events" do + stubbed_hostname = "mystubbedhostname" + Socket.stubs(:gethostname).returns(stubbed_hostname) + + logfile = Tempfile.new("logstash") + begin + @input = LogStash::Inputs::File.new("type" => ["testing"], "path" => [logfile.path]) + @input.register + + queue = Queue.new + + Thread.new { @input.run(queue) } + + event = nil + start = Time.now + while event.nil? and (Time.now - start) <= 5.0 + logfile.write("This is my log message.\n") + logfile.flush + + begin + event = queue.pop(true) + rescue ThreadError => error + raise error unless error.to_s == "queue empty" + sleep(0.05) + end + end + + @input.teardown + + refute_nil event + + uri = Addressable::URI.parse(event.source) + assert_equal "file", uri.scheme + assert_equal stubbed_hostname, uri.host + assert_equal logfile.path, uri.path + ensure + logfile.close + logfile.unlink + end + end + test "file input sets source_path properly for events" do logfile = Tempfile.new("logstash") begin @@ -21,7 +65,8 @@ describe LogStash::Inputs::File do Thread.new { @input.run(queue) } event = nil - while event.nil? + start = Time.now + while event.nil? and (Time.now - start) <= 5.0 logfile.write("This is my log message.\n") logfile.flush @@ -41,4 +86,5 @@ describe LogStash::Inputs::File do logfile.unlink end end + end # testing for LogStash::Inputs::File