Pushing.
This commit is contained in:
@@ -1,13 +1,95 @@
|
||||
require "logstash/devutils/rspec/spec_helper"
|
||||
require "logstash/outputs/jdbc"
|
||||
require "stud/temporary"
|
||||
require "java"
|
||||
|
||||
describe LogStash::Outputs::Jdbc do
|
||||
def fetch_log_table_rowcount
|
||||
# sleep for a second to let the flush happen
|
||||
sleep 1
|
||||
|
||||
stmt = @sql.createStatement()
|
||||
rs = stmt.executeQuery("select count(*) as total from log")
|
||||
count = 0
|
||||
while rs.next()
|
||||
count = rs.getInt("total")
|
||||
end
|
||||
stmt.close()
|
||||
|
||||
it "should register without errors" do
|
||||
plugin = LogStash::Plugin.lookup("output", "jdbc").new({})
|
||||
expect { plugin.register }.to_not raise_error
|
||||
return count
|
||||
end
|
||||
|
||||
let(:base_settings) { {
|
||||
"driver_jar_path" => @driver_jar_path,
|
||||
"connection_string" => @test_connection_string,
|
||||
"username" => ENV['SQL_USERNAME'],
|
||||
"password" => ENV['SQL_PASSWORD'],
|
||||
"statement" => [ "insert into log (message) values(?)", "message" ],
|
||||
"max_pool_size" => 1,
|
||||
"flush_size" => 1,
|
||||
"max_flush_exceptions" => 1
|
||||
} }
|
||||
let(:test_settings) { {} }
|
||||
let(:plugin) { LogStash::Outputs::Jdbc.new(base_settings.merge(test_settings)) }
|
||||
let(:event_fields) { { "message" => "This is a message!" } }
|
||||
let(:event) { LogStash::Event.new(event_fields) }
|
||||
|
||||
before(:all) do
|
||||
@driver_jar_path = File.absolute_path(ENV['SQL_JAR'])
|
||||
@test_db_path = File.join(Stud::Temporary.directory, "test.db")
|
||||
@test_connection_string = "jdbc:sqlite:#{@test_db_path}"
|
||||
|
||||
require @driver_jar_path
|
||||
|
||||
@sql = java.sql.DriverManager.get_connection(@test_connection_string, ENV['SQL_USERNAME'].to_s, ENV['SQL_PASSWORD'].to_s)
|
||||
stmt = @sql.createStatement()
|
||||
stmt.executeUpdate("CREATE table log (host text, timestamp datetime, message text);")
|
||||
stmt.close()
|
||||
end
|
||||
|
||||
before(:each) do
|
||||
stmt = @sql.createStatement()
|
||||
stmt.executeUpdate("delete from log")
|
||||
stmt.close()
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
File.unlink(@test_db_path)
|
||||
Dir.rmdir(File.dirname(@test_db_path))
|
||||
end
|
||||
|
||||
describe "safe statement" do
|
||||
it "should register without errors" do
|
||||
expect { plugin.register }.to_not raise_error
|
||||
end
|
||||
|
||||
it "receive event, without error" do
|
||||
plugin.register
|
||||
expect { plugin.receive(event) }.to_not raise_error
|
||||
|
||||
expect(fetch_log_table_rowcount).to eq(1)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "unsafe statement" do
|
||||
let(:event_fields) {
|
||||
{ "message" => "This is a message!", "table" => "log" }
|
||||
}
|
||||
let(:test_settings) { {
|
||||
"statement" => [ "insert into %{table} (message) values(?)", "message" ],
|
||||
"unsafe_statement" => true
|
||||
} }
|
||||
|
||||
it "should register without errors" do
|
||||
expect { plugin.register }.to_not raise_error
|
||||
end
|
||||
|
||||
it "receive event, without error" do
|
||||
plugin.register
|
||||
plugin.receive(event)
|
||||
expect(fetch_log_table_rowcount).to eq(1)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user