jls-lumberjack 0.0.22 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2eeaf07362d0a05cb9f5a7ba3b4e84762183541
4
- data.tar.gz: 47a7ad5fe615e534f0a4c3dfb7bc4c2dae8848bf
3
+ metadata.gz: 5ecf8e491d03fcc59fb32625cd5ad69018071f89
4
+ data.tar.gz: 3fc5d05089e0b192d736fb046854635757bf10e6
5
5
  SHA512:
6
- metadata.gz: 506fd08902840718a03ef4dd1e811b038175e02b91ab3a1f7da88b8a1fdbacebaafb885b380427a2e1b8c7625f98ad2244fbac1e95862411f80c12b4164712ce
7
- data.tar.gz: c508912a60e9c35bcb6457dfc3643366d7f09ff82a9cb269c1a98b5d042220d5ab67d3ab0c0c5b49669547956548d2bad3f3811164c90c825372b3610bdab637
6
+ metadata.gz: 4d6cc57fc88054f98a72bf6ccb51bdd2d91b01d6e1ba4232ac7bda25d3cf21acdb07e3940b6c0938ac6f2807f8701404819b30cbe3cfaf9edcd6d7cf919fffe6
7
+ data.tar.gz: 79946f5b1c4237e14e13a44a9d257635722469f57832a8ced321e45606236279c2b380d57c18ed8d9a18c13fa5306fb044c150a26ff46c74da5dc10d11d1b33b
@@ -80,7 +80,17 @@ module Lumberjack
80
80
  private
81
81
  def connection_start(opts)
82
82
  tcp_socket = TCPSocket.new(opts[:address], opts[:port])
83
- @socket = OpenSSL::SSL::SSLSocket.new(tcp_socket)
83
+
84
+ certificate = OpenSSL::X509::Certificate.new(File.read(opts[:ssl_certificate]))
85
+
86
+ certificate_store = OpenSSL::X509::Store.new
87
+ certificate_store.add_cert(certificate)
88
+
89
+ ssl_context = OpenSSL::SSL::SSLContext.new
90
+ ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER
91
+ ssl_context.cert_store = certificate_store
92
+
93
+ @socket = OpenSSL::SSL::SSLSocket.new(tcp_socket, ssl_context)
84
94
  @socket.connect
85
95
  @socket.syswrite(["1", "W", @window_size].pack("AAN"))
86
96
  end
@@ -133,48 +143,6 @@ module Lumberjack
133
143
  def read_last_ack
134
144
  @socket.read(4).unpack("N").first
135
145
  end
136
-
137
- private
138
- def to_frame(hash, sequence)
139
- frame = ["1", "D", sequence]
140
- pack = "AAN"
141
- keys = deep_keys(hash)
142
- frame << keys.length
143
- pack << "N"
144
- keys.each do |k|
145
- val = deep_get(hash,k)
146
- key_length = k.bytesize
147
- val_length = val.bytesize
148
- frame << key_length
149
- pack << "N"
150
- frame << k
151
- pack << "A#{key_length}"
152
- frame << val_length
153
- pack << "N"
154
- frame << val
155
- pack << "A#{val_length}"
156
- end
157
- frame.pack(pack)
158
- end
159
-
160
- private
161
- def deep_get(hash, key="")
162
- return hash if key.nil?
163
- deep_get(
164
- hash[key.split('.').first],
165
- key[key.split('.').first.length+1..key.length]
166
- )
167
- end
168
-
169
- private
170
- def deep_keys(hash, prefix="")
171
- keys = []
172
- hash.each do |k,v|
173
- keys << "#{prefix}#{k}" if v.class == String
174
- keys << deep_keys(hash[k], "#{k}.") if v.class == Hash
175
- end
176
- keys.flatten
177
- end
178
146
  end
179
147
 
180
148
  module Encoder
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+ require "lumberjack/client"
3
+ require "lumberjack/server"
4
+ require "stud/temporary"
5
+ require "flores/pki"
6
+ require "fileutils"
7
+ require "thread"
8
+ require "spec_helper"
9
+
10
+ describe "A client" do
11
+ let(:certificate) { Flores::PKI.generate }
12
+ let(:certificate_file_crt) { "certificate.crt" }
13
+ let(:certificate_file_key) { "certificate.key" }
14
+ let(:port) { Flores::Random.integer(1024..65335) }
15
+ let(:host) { "127.0.0.1" }
16
+
17
+ before do
18
+ expect(File).to receive(:read).at_least(1).with(certificate_file_crt) { certificate.first.to_s }
19
+ expect(File).to receive(:read).at_least(1).with(certificate_file_key) { certificate.last.to_s }
20
+
21
+ server = Lumberjack::Server.new(:port => port,
22
+ :address => host,
23
+ :ssl_certificate => certificate_file_crt,
24
+ :ssl_key => certificate_file_key)
25
+
26
+ Thread.new do
27
+ server.run { |data| }
28
+ end
29
+ end
30
+
31
+ context "with a valid certificate" do
32
+ it "successfully connect to the server" do
33
+ expect {
34
+ Lumberjack::Client.new(:port => port,
35
+ :host => host,
36
+ :addresses => host,
37
+ :ssl_certificate => certificate_file_crt)
38
+
39
+ }.not_to raise_error
40
+ end
41
+ end
42
+
43
+ context "with an invalid certificate" do
44
+ let(:invalid_certificate) { Flores::PKI.generate }
45
+ let(:invalid_certificate_file) { "invalid.crt" }
46
+
47
+ before do
48
+ expect(File).to receive(:read).with(invalid_certificate_file) { invalid_certificate.first.to_s }
49
+ end
50
+
51
+ it "should refuse to connect" do
52
+ expect {
53
+ Lumberjack::Client.new(:port => port,
54
+ :host => host,
55
+ :addresses => host,
56
+ :ssl_certificate => invalid_certificate_file)
57
+
58
+ }.to raise_error(OpenSSL::SSL::SSLError, /certificate verify failed/)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,98 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'lumberjack/client'
4
+ require 'lumberjack/server'
5
+ require "socket"
6
+ require "thread"
7
+ require "openssl"
8
+ require "zlib"
9
+
10
+ describe "Lumberjack::Client" do
11
+
12
+ describe "Lumberjack::Socket" do
13
+
14
+ let(:port) { 5000 }
15
+
16
+ subject(:socket) { Lumberjack::Socket.new(:port => port, :ssl_certificate => "" ) }
17
+
18
+ before do
19
+ allow_any_instance_of(Lumberjack::Socket).to receive(:connection_start).and_return(true)
20
+ end
21
+
22
+ context "sequence" do
23
+
24
+ let(:hash) { {:a => 1, :b => 2}}
25
+ let(:max_unsigned_int) { (2**32)-1 }
26
+
27
+ before(:each) do
28
+ allow(socket).to receive(:ack).and_return(true)
29
+ allow(socket).to receive(:write).and_return(true)
30
+ end
31
+
32
+ it "force sequence to be an unsigned 32 bits int" do
33
+ socket.instance_variable_set(:@sequence, max_unsigned_int)
34
+ socket.write_hash(hash)
35
+ expect(socket.sequence).to eq(1)
36
+ end
37
+ end
38
+
39
+ context "ack" do
40
+
41
+ let(:hash) { {:a => 1, :b => 2}}
42
+
43
+ before(:each) do
44
+ allow(socket).to receive(:write).and_return(true)
45
+ end
46
+
47
+ it "increments the sequence per windows size" do
48
+ allow(socket).to receive(:read_version_and_type).and_return([1, 'A'])
49
+ expect(socket).to receive(:ack).twice.and_call_original
50
+
51
+ [5000, 10000].each do |last_ack|
52
+ windows_size = 5001
53
+
54
+ allow(socket).to receive(:read_last_ack).and_return(last_ack)
55
+
56
+ windows_size.times do
57
+ socket.write_hash(hash)
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+
65
+ describe Lumberjack::Encoder do
66
+ it 'should creates frames without truncating accentued characters' do
67
+ content = {
68
+ "message" => "Le Canadien de Montréal est la meilleure équipe au monde!",
69
+ "other" => "éléphant"
70
+ }
71
+ parser = Lumberjack::Parser.new
72
+ parser.feed(Lumberjack::Encoder.to_frame(content, 0)) do |code, sequence, data|
73
+ expect(data["message"].force_encoding('UTF-8')).to eq(content["message"])
74
+ expect(data["other"].force_encoding('UTF-8')).to eq(content["other"])
75
+ end
76
+ end
77
+
78
+ it 'should creates frames without dropping multibytes characters' do
79
+ content = {
80
+ "message" => "国際ホッケー連盟" # International Hockey Federation
81
+ }
82
+ parser = Lumberjack::Parser.new
83
+ parser.feed(Lumberjack::Encoder.to_frame(content, 0)) do |code, sequence, data|
84
+ expect(data["message"].force_encoding('UTF-8')).to eq(content["message"])
85
+ end
86
+ end
87
+
88
+ it 'should creates compressed frames' do
89
+ content = {
90
+ "message" => "国際ホッケー連盟" # International Hockey Federation
91
+ }
92
+ parser = Lumberjack::Parser.new
93
+ parser.feed(Lumberjack::Encoder.to_compressed_frame(content, 0)) do |code, sequence, data|
94
+ expect(data["message"].force_encoding('UTF-8')).to eq(content["message"])
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+ require 'rspec'
3
+ require 'rspec/mocks'
4
+ $: << File.realpath(File.join(File.dirname(__FILE__), "..", "lib"))
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jls-lumberjack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Sissel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-06 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2015-07-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: flores
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.6
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: stud
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
13
55
  description: lumberjack log transport library
14
56
  email:
15
57
  - jls@semicomplete.com
@@ -19,6 +61,9 @@ extra_rdoc_files: []
19
61
  files:
20
62
  - lib/lumberjack/client.rb
21
63
  - lib/lumberjack/server.rb
64
+ - spec/integration_spec.rb
65
+ - spec/lumberjack/client_spec.rb
66
+ - spec/spec_helper.rb
22
67
  homepage: https://github.com/jordansissel/lumberjack
23
68
  licenses: []
24
69
  metadata: {}
@@ -38,8 +83,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
83
  version: '0'
39
84
  requirements: []
40
85
  rubyforge_project:
41
- rubygems_version: 2.4.3
86
+ rubygems_version: 2.4.5
42
87
  signing_key:
43
88
  specification_version: 4
44
89
  summary: lumberjack log transport library
45
- test_files: []
90
+ test_files:
91
+ - spec/integration_spec.rb
92
+ - spec/lumberjack/client_spec.rb
93
+ - spec/spec_helper.rb