Skip to content
This repository was archived by the owner on Sep 17, 2019. It is now read-only.

Commit eef7473

Browse files
committed
Pushing.
1 parent 7a1da5b commit eef7473

File tree

3 files changed

+97
-8
lines changed

3 files changed

+97
-8
lines changed

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ This plugin does not bundle any JDBC jar files, and does expect them to be in a
1212
particular location. Please ensure you read the 4 installation lines below.
1313

1414
## Headlines
15-
- Support for connection pooling added in 0.2.0 [unreleased until #10 is resolved]
16-
- Support for unsafe statement handling (allowing dynamic queries) in 0.2.0 [unreleased until #10 is resolved]
17-
- Altered exception handling to now count sequential flushes with exceptions thrown in 0.2.0 [untested and unreleased until #10 is resolved]
15+
- Support for connection pooling added in 0.2.0
16+
- Support for unsafe statement handling (allowing dynamic queries) in 0.2.0
17+
- Altered exception handling to now count sequential flushes with exceptions thrown in 0.2.0
1818

1919
## Versions
2020
- See master branch for logstash v2+
@@ -30,6 +30,13 @@ particular location. Please ensure you read the 4 installation lines below.
3030
- Add JDBC jar files to vendor/jar/jdbc in your logstash installation
3131
- And then configure (examples below)
3232

33+
## Running tests
34+
Assuming valid JDBC jar, and jruby is setup and installed, and you have issued `jruby -S bundle install` in the development directory
35+
- `SQL_JAR=path/to/your.jar jruby -S bundle exec rspec`
36+
If you need to provide username and password you may do this via the environment variables `SQL_USERNAME` and `SQL_PASSWORD`.
37+
38+
Tests are not yet 100% complete.
39+
3340
## Configuration options
3441

3542
| Option | Type | Description | Required? | Default |

logstash-output-jdbc.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |s|
22
s.name = 'logstash-output-jdbc'
3-
s.version = "0.2.0.rc5"
3+
s.version = "0.2.1"
44
s.licenses = [ "Apache License (2.0)" ]
55
s.summary = "This plugin allows you to output to SQL, via JDBC"
66
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"

spec/outputs/jdbc_spec.rb

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,95 @@
11
require "logstash/devutils/rspec/spec_helper"
22
require "logstash/outputs/jdbc"
33
require "stud/temporary"
4+
require "java"
45

56
describe LogStash::Outputs::Jdbc do
7+
def fetch_log_table_rowcount
8+
# sleep for a second to let the flush happen
9+
sleep 1
10+
11+
stmt = @sql.createStatement()
12+
rs = stmt.executeQuery("select count(*) as total from log")
13+
count = 0
14+
while rs.next()
15+
count = rs.getInt("total")
16+
end
17+
stmt.close()
18+
19+
return count
20+
end
21+
22+
let(:base_settings) { {
23+
"driver_jar_path" => @driver_jar_path,
24+
"connection_string" => @test_connection_string,
25+
"username" => ENV['SQL_USERNAME'],
26+
"password" => ENV['SQL_PASSWORD'],
27+
"statement" => [ "insert into log (message) values(?)", "message" ],
28+
"max_pool_size" => 1,
29+
"flush_size" => 1,
30+
"max_flush_exceptions" => 1
31+
} }
32+
let(:test_settings) { {} }
33+
let(:plugin) { LogStash::Outputs::Jdbc.new(base_settings.merge(test_settings)) }
34+
let(:event_fields) { { "message" => "This is a message!" } }
35+
let(:event) { LogStash::Event.new(event_fields) }
36+
37+
before(:all) do
38+
@driver_jar_path = File.absolute_path(ENV['SQL_JAR'])
39+
@test_db_path = File.join(Stud::Temporary.directory, "test.db")
40+
@test_connection_string = "jdbc:sqlite:#{@test_db_path}"
41+
42+
require @driver_jar_path
43+
44+
@sql = java.sql.DriverManager.get_connection(@test_connection_string, ENV['SQL_USERNAME'].to_s, ENV['SQL_PASSWORD'].to_s)
45+
stmt = @sql.createStatement()
46+
stmt.executeUpdate("CREATE table log (host text, timestamp datetime, message text);")
47+
stmt.close()
48+
end
49+
50+
before(:each) do
51+
stmt = @sql.createStatement()
52+
stmt.executeUpdate("delete from log")
53+
stmt.close()
54+
end
55+
56+
after(:all) do
57+
File.unlink(@test_db_path)
58+
Dir.rmdir(File.dirname(@test_db_path))
59+
end
60+
61+
describe "safe statement" do
62+
it "should register without errors" do
63+
expect { plugin.register }.to_not raise_error
64+
end
65+
66+
it "receive event, without error" do
67+
plugin.register
68+
expect { plugin.receive(event) }.to_not raise_error
69+
70+
expect(fetch_log_table_rowcount).to eq(1)
71+
end
72+
73+
end
74+
75+
describe "unsafe statement" do
76+
let(:event_fields) {
77+
{ "message" => "This is a message!", "table" => "log" }
78+
}
79+
let(:test_settings) { {
80+
"statement" => [ "insert into %{table} (message) values(?)", "message" ],
81+
"unsafe_statement" => true
82+
} }
83+
84+
it "should register without errors" do
85+
expect { plugin.register }.to_not raise_error
86+
end
687

7-
it "should register without errors" do
8-
plugin = LogStash::Plugin.lookup("output", "jdbc").new({})
9-
expect { plugin.register }.to_not raise_error
88+
it "receive event, without error" do
89+
plugin.register
90+
plugin.receive(event)
91+
expect(fetch_log_table_rowcount).to eq(1)
92+
end
1093

1194
end
12-
1395
end

0 commit comments

Comments
 (0)