jls-lumberjack 0.0.22 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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