kinetic-ruby 0.3.8 → 0.5.0

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: 1ac835296c563ed8d45dd417494aaeab11221a6b
4
- data.tar.gz: 5d76a53e2bc1a5256c41a820659581d9ed0499e2
3
+ metadata.gz: baa7b2b2078f4a6d89936a205aecb57c9d5f2f4b
4
+ data.tar.gz: e670900a889bab053e1adb4b8fb6d90e9275c102
5
5
  SHA512:
6
- metadata.gz: a89c19cca9552a89c0c0dc36947afc0f79818b40127b6fdae049eff08ad94f79200523eb81a554b93d5e964aeb2ce195d406dae315f0bbd8f4013a9825894f5e
7
- data.tar.gz: d2896d44f2e55b7aa5754857a39f816924e63e0ef208f1b576579134d5579e3252b5ea505b47ca09561a79e549a7bffcdc8ecdcc33d89fdbb9c1e2fcac86d589
6
+ metadata.gz: a875dd98f18161bdd2de90b117ac7d572186228bc595f707fbf4ab383af0e14a629ee0e62af76f00b133a1037f9c264e2cd478d7908863722b99f5a2208a353c
7
+ data.tar.gz: 8d77c7d4b5693adc2c584891989b45cbca2f2da239a24ca8e95cb9275ef7f9fbb3067b30bf1ba311c38d04c2a95ff46bd5303b27d3b12348f6e0843dee3f612c
data/Rakefile CHANGED
@@ -1,60 +1,114 @@
1
- HERE = File.expand_path(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift File.join(HERE, 'lib')
3
-
4
1
  require 'rake'
5
2
  require 'rake/clean'
3
+ $LOAD_PATH.unshift File.expand_path('lib')
6
4
  require 'kinetic-ruby'
7
5
 
8
- load 'tasks/kinetic-ruby.rake'
6
+ KineticRuby::Rake::load_tasks()
9
7
 
10
8
  CLEAN.include ['*.gem', '*.log']
11
9
 
10
+ namespace :test do
11
+ desc "Test Kinetic Ruby server"
12
+ task :server => 'kinetic:server:start' do
13
+ report "Started Kinetic Ruby server!"
14
+ sleep 2.0
15
+ client = Thread.new do
16
+ report "Connecting test client to #{$kinetic_server.host}:#{$kinetic_server.port}..."
17
+ sh "telnet #{$kinetic_server.host} #{$kinetic_server.port}"
18
+ end
19
+ sleep 1.0
20
+ raise "Failed connecting a client to Kinetic Ruby server!" unless $kinetic_server.connected
21
+ client.exit
22
+ client.join(2.0)
23
+ $kinetic_server.shutdown unless $kinetic_server.nil?
24
+ $kinetic_server = nil
25
+ sleep 2.0
26
+ report "Kinetic Ruby server test successful!"
27
+ end
28
+ end
29
+
12
30
  desc "Run example"
13
31
  task :example do
14
- kr = KineticRuby::Proto.new
32
+ kl = KineticRuby::Logger.new
33
+ kr = KineticRuby::Proto.new(kl)
15
34
  kr.test_kinetic_proto
16
35
  end
17
36
 
18
37
  desc "Run example w/o logging"
19
38
  task :example_no_log do
20
- kr = KineticRuby::Proto.new(KineticRuby::Logger::LOG_LEVEL_NONE)
39
+ kl = KineticRuby::Logger.new(KineticRuby::Logger::LOG_LEVEL_NONE)
40
+ kr = KineticRuby::Proto.new(kl)
21
41
  kr.test_kinetic_proto
22
42
  end
23
43
 
24
44
  desc "Run example w/ verbose logging"
25
45
  task :example_verbose_log do
26
- kr = KineticRuby::Proto.new(KineticRuby::Logger::LOG_LEVEL_VERBOSE)
46
+ kl = KineticRuby::Logger.new(KineticRuby::Logger::LOG_LEVEL_VERBOSE)
47
+ kr = KineticRuby::Proto.new(kl)
27
48
  kr.test_kinetic_proto
28
49
  end
29
50
 
30
- task :default => [:example]
51
+ task :update_version_info do
52
+ require 'erb'
53
+ proto_ver = ''
54
+ FileUtils.cd 'vendor/kinetic-protocol' do
55
+ proto_ver = 'v' + `git describe --tags 2> /dev/null`.strip
56
+ proto_ver = 'v<Unknown!>' if proto_ver !~ /^v\d+\.\d+\.\d+/
57
+ end
58
+ template = File.read('lib/version.rb.erb')
59
+ content = ERB.new(template).result(binding)
60
+ File.open('lib/version.rb', "w+"){|f| f.write(content) }
61
+ new_ver = content.match(/ VERSION = '(.+)'.+ PROTOCOL_VERSION = '(.+)'/m)
62
+ raise "Failed to parse updated version info!" unless new_ver
63
+ if ((new_ver[1] != KineticRuby::VERSION) ||
64
+ (new_ver[2] != KineticRuby::PROTOCOL_VERSION))
65
+ report "Kinetic Ruby version info has changed! You must re-run Rake to resync!\nExiting..."
66
+ exit 1
67
+ end
68
+ end
31
69
 
32
70
  desc "Build kinetic-ruby gem"
33
- task :build do
34
- banner "Building kinetic-ruby gem v#{KineticRuby::VERSION} using Kinetic Protocol #{KineticRuby::KINETIC_PROTOCOL_VERSION}"
71
+ task :build => :update_version_info do
72
+ report("Building kinetic-ruby gem v#{KineticRuby::VERSION} w/ Kinetic Protocol #{KineticRuby::PROTOCOL_VERSION}", true)
35
73
  sh "gem build kinetic-ruby.gemspec"
36
- puts
74
+ report
75
+ end
76
+
77
+ # desc "Build and install kinetic-ruby gem"
78
+ task :install => :build do
79
+ report("Installing KineticRuby gem v#{KineticRuby::VERSION}", true)
80
+ sh "sudo gem uninstall --all kinetic-ruby"
81
+ sh "sudo gem install --no-doc kinetic-ruby-#{KineticRuby::VERSION}.gem"
37
82
  end
38
83
 
39
84
  task :release => :ci do
40
- banner "Publishing kinetic-ruby gem v#{KineticRuby::VERSION} to RubyGems"
41
- proto_ver = KineticRuby::KINETIC_PROTOCOL_VERSION
85
+ report("Publishing kinetic-ruby gem v#{KineticRuby::VERSION} to RubyGems", true)
86
+ proto_ver = KineticRuby::PROTOCOL_VERSION
42
87
  if proto_ver !~ /v\d+\.\d+\.\d+/
43
88
  raise "Can only publish gem with a release tag of Kinetic Protocol!\n" +
44
89
  " reported Kinetic Protocol version: "
45
90
  end
46
- puts "Releasing gem built w/ Kinetic Protocol #{proto_ver}"
91
+ report "Releasing gem built w/ Kinetic Protocol #{proto_ver}"
47
92
  sh "gem push kinetic-ruby-#{KineticRuby::VERSION}.gem"
48
- puts
93
+ report
49
94
  end
50
95
 
51
- task :ci =>[:clobber, :example, :example_no_log, :build]
96
+ task :default => [:example, 'test:server']
97
+
98
+ task :ci =>[:clobber, :example, :example_no_log, 'test:server', :build] do
99
+ report("Kinetic Ruby Test Results", true)
100
+ report "SUCCESSFUL!"
101
+ end
52
102
 
53
103
  #############################################
54
104
  # Helper methods and goodies
55
105
 
56
- def banner(msg)
57
- puts
106
+ def report(msg='', banner=false)
107
+ $stderr.flush
108
+ if banner
109
+ len = msg.length
110
+ msg = "\n#{msg}\n#{'-'*len}"
111
+ end
58
112
  puts msg
59
- puts "-"*msg.length
113
+ $stdout.flush
60
114
  end
data/lib/kinetic-ruby.rb CHANGED
@@ -1,18 +1,19 @@
1
- require_relative 'kinetic_logger'
2
- require_relative 'kinetic_proto'
3
- require_relative 'kinetic_server'
1
+ # Preload all library files
2
+ require 'fileutils'
4
3
 
5
- module KineticRuby
6
-
7
- VERSION = '0.3.8'
8
- DEFAULT_KINETIC_PORT = 8123
9
- TEST_KINETIC_PORT = 8999
10
-
11
- kp_tag = ''
12
- FileUtils.cd "./vendor/kinetic-protocol" do
13
- kp_tag = 'v' + `git describe --tags`.strip
14
- kp_tag = "<Unknown Kinetic Protocol version!>" if kp_tag !~ /^v\d+\.\d+\.\d+/
4
+ FileUtils.cd(File.dirname(__FILE__)) do
5
+ Dir['./**/*.rb'].each do |f|
6
+ mod = f.sub(/.rb/, '')
7
+ require mod
15
8
  end
16
- KINETIC_PROTOCOL_VERSION = kp_tag
9
+ end
17
10
 
11
+ module KineticRuby
12
+ module Rake
13
+ def self.load_tasks
14
+ Dir["#{File.dirname(__FILE__)}/../tasks/**/*.rake"].each do |tasks|
15
+ load tasks
16
+ end
17
+ end
18
+ end
18
19
  end
@@ -1,9 +1,6 @@
1
1
  module KineticRuby
2
+
2
3
  class Logger
3
- def initialize(logging_level=LOG_LEVEL_INFO, stream=$stdout)
4
- set_log_level(logging_level)
5
- @stream = stream
6
- end
7
4
 
8
5
  LOG_LEVELS = [
9
6
  LOG_LEVEL_NONE = 0,
@@ -12,32 +9,52 @@ module KineticRuby
12
9
  LOG_LEVEL_VERBOSE = 3,
13
10
  ]
14
11
 
15
- def set_log_level(level)
16
- if !LOG_LEVELS.include? level
17
- raise "\nInvalid LOG_LEVEL specified!\nValid levels:\n\t" +
18
- LOG_LEVELS.map{|l|"#{self.class}::#{l}"}.join("\n\t") + "\n\n"
19
- end
20
- @level = level
12
+ def initialize(log_level=LOG_LEVEL_INFO, stream=$stdout)
13
+ set_level log_level
14
+ @stream = stream
15
+ end
16
+
17
+ def level=(log_level)
18
+ set_level(log_level)
19
+ end
20
+
21
+ def level
22
+ @level.dup
21
23
  end
22
24
 
23
- def log_info(msg='')
24
- log_message(msg) if @level >= LOG_LEVEL_INFO
25
+ def log_info(msg='', banner=nil)
26
+ log_message(msg, banner) if @level >= LOG_LEVEL_INFO
25
27
  end
28
+ alias logi log_info
26
29
  alias log log_info
27
30
 
28
- def log_err(msg='')
29
- log_message(msg, $stderr) if @level >= LOG_LEVEL_ERROR
31
+ def log_err(msg='', banner=nil)
32
+ log_message(msg, banner) if @level >= LOG_LEVEL_ERROR
30
33
  end
34
+ alias loge log_err
31
35
 
32
- def log_verbose(msg='')
33
- log_message(msg) if @level >= LOG_LEVEL_VERBOSE
36
+ def log_verbose(msg='', banner=nil)
37
+ log_message(msg, banner) if @level >= LOG_LEVEL_VERBOSE
34
38
  end
39
+ alias logv log_verbose
35
40
 
36
- def log_message(msg='')
37
- $stderr.flush
38
- @stream.flush
41
+ private
42
+
43
+ def set_level(log_level)
44
+ if !LOG_LEVELS.include? log_level
45
+ raise "\nInvalid LOG_LEVEL specified: #{log_level}\nValid levels:\n " +
46
+ LOG_LEVELS.map{|l|"#{self.class}::#{l}"}.join("\n ") + "\n\n"
47
+ end
48
+ @level = log_level
49
+ end
50
+
51
+ LOG_BANNER = "\n----------------------------------------"
52
+
53
+ def log_message(msg, banner)
54
+ msg += LOG_BANNER if (banner && msg && !msg.empty?)
39
55
  @stream.puts msg
40
56
  @stream.flush
41
57
  end
58
+
42
59
  end
43
60
  end
@@ -0,0 +1,71 @@
1
+ module KineticRuby
2
+
3
+ attr_reader :header, :protobuf, :value
4
+
5
+ class PDU
6
+
7
+ def initialize(logger, raw=nil)
8
+ raise "Invalid logger specified!" unless logger
9
+ @logger = logger
10
+ parse(raw)
11
+ end
12
+
13
+ def parse(raw)
14
+ @header = parse_header(raw)
15
+ @protobuf = parse_protobuf(raw) if @header
16
+ @value = parse_value(raw) if (@header && @protobuf)
17
+ return (@header && @protobuf && @value)
18
+ end
19
+
20
+ def length
21
+ len = 0
22
+ len += HEADER_LENGTH if @header
23
+ len += @header[:protobuf_length] if @protobuf
24
+ len += @header[:value_length] if @value
25
+ return len
26
+ end
27
+ alias size length
28
+
29
+ private
30
+
31
+ HEADER_LENGTH = 1 + 4 + 4 # version_prefix + protobuf_length + value_length
32
+
33
+ def parse_header(raw)
34
+ return nil unless (raw && raw.length <= HEADER_LENGTH)
35
+ {
36
+ version_prefix: raw[0],
37
+ protobuf_length: parse_nbo_int32(raw.byteslice(1..4)),
38
+ value_length: parse_nbo_int32(raw.byteslice(5..9))
39
+ }
40
+ end
41
+
42
+ def parse_protobuf(raw)
43
+ min_length = (HEADER_LENGTH + @header[:protobuf_length])
44
+ return nil unless (@header && raw.length >= min_length)
45
+ start_idx = HEADER_LENGTH
46
+ end_idx = HEADER_LENGTH + min_length - 1
47
+ protobuf = raw.byteslice(start_idx, end_idx)
48
+ Seagate::Kinetic::Message.decode(protobuf)
49
+ end
50
+
51
+ def parse_value(raw)
52
+ min_length = (HEADER_LENGTH + @header[:protobuf_length] + @header[:value_length])
53
+ return nil unless (@header && @protobuf && raw.length >= min_length)
54
+ start_idx = HEADER_LENGTH + @header[:protobuf_length]
55
+ end_idx = start_idx + @header[:protobuf_length] - 1
56
+ @value = raw.byteslice(start_idx, end_idx)
57
+ end
58
+
59
+ def parse_nbo_int32(data)
60
+ raise "Not enough data to parse NBO integer!" unless data.length >= 4
61
+ val = 0
62
+ data.each_byte do |byte|
63
+ val <<= 8
64
+ val += byte
65
+ end
66
+ return val
67
+ end
68
+
69
+ end
70
+
71
+ end
data/lib/kinetic_proto.rb CHANGED
@@ -1,48 +1,31 @@
1
1
  require 'yaml'
2
- require 'fileutils'
3
- require_relative 'kinetic_logger'
4
- require_relative 'kinetic_server'
5
2
 
6
3
  module KineticRuby
7
4
 
8
5
  class Proto
9
6
 
10
- def initialize(log_level = KineticRuby::Logger::LOG_LEVEL_INFO)
11
- require_relative "protobuf/kinetic.pb"
7
+ VERSION_PREFIX = 'F'
8
+
9
+ def initialize(logger)
10
+ @logger = logger
12
11
  @message_out = nil
13
12
  @message_in = nil
14
- @logger = KineticRuby::Logger.new(log_level)
15
13
  end
16
14
 
17
15
  def decode(buf)
18
16
  @message_in = Seagate::Kinetic::Message.decode(buf)
19
-
20
17
  @logger.log
21
- @logger.log "#{@message_in.class} - Decoding"
22
- @logger.log "-----------------------------------"
23
-
24
- @logger.log " command:"
25
- @message_in.command.to_yaml.each_line{|l| @logger.log " #{l}"}
18
+ @logger.log("\n#{@message_in.class} - Decoding", true)
19
+ @logger.log ' command:'
20
+ @message_in.command.to_yaml.each_line{|line| @logger.log ' ' + line}
26
21
  @logger.log
27
22
  end
28
23
 
29
24
  def test_encode
30
25
  pb = Seagate::Kinetic::Message.new
31
26
 
32
- @logger.log
33
- @logger.log "#{pb.class} - Encoding"
34
- @logger.log "---------------------------------------"
35
-
36
- @logger.log_verbose " fields:"
37
- pb.fields.sort.each{|f| @logger.log_verbose " #{f}"}
38
- @logger.log_verbose
39
-
40
- @logger.log_verbose " hmac:"
41
- pb.hmac = "0123456789ABCDEF0123"
42
- @logger.log_verbose " #{pb.hmac.inspect}"
43
- @logger.log_verbose
44
-
45
- @logger.log " command:"
27
+ @logger.log("\n#{pb.class} - Encoding", true)
28
+ pb.hmac = '0123456789ABCDEF0123'
46
29
  pb.command = Seagate::Kinetic::Message::Command.new(
47
30
  header: Seagate::Kinetic::Message::Header.new(
48
31
  clusterVersion: 0x1122334455667788,
@@ -55,24 +38,26 @@ module KineticRuby
55
38
  ),
56
39
  status: Seagate::Kinetic::Message::Status.new(
57
40
  code: Seagate::Kinetic::Message::Status::StatusCode::NO_SUCH_HMAC_ALGORITHM,
58
- statusMessage: "The specified HMAC security algorithm does not exist!",
59
- detailedMessage: "YOUCH!"
41
+ statusMessage: 'The specified HMAC security algorithm does not exist!',
42
+ detailedMessage: 'YOUCH!'
60
43
  ),
61
44
  )
62
- pb.command.to_yaml.each_line{|l| @logger.log(" #{l}")}
63
- @logger.log
64
-
45
+ encoded = pb.encode
65
46
  @message_out = pb
66
47
 
67
- @logger.log " encoded:"
68
- encoded = pb.encode
69
- @logger.log_verbose
70
- @logger.log_verbose " Inspection: #{encoded.inspect}"
71
- @logger.log_verbose
48
+ @logger.log_verbose ' fields:'
49
+ pb.fields.sort.each{|f| @logger.log_verbose(" #{f}")}
50
+ @logger.log_verbose " hmac:\n #{pb.hmac}"
51
+
52
+ @logger.log ' command:'
53
+ pb.command.to_yaml.each_line{|l| @logger.log(" #{l}")}
54
+ @logger.log ' encoded:'
55
+ @logger.log ' Length: ' + encoded.length.to_s + ' bytes'
56
+
57
+ @logger.log_verbose " Raw:\n #{encoded.inspect}"
72
58
  @logger.log_verbose " Content:"
73
- encoded.to_yaml.each_line{|l| @logger.log_verbose " #{l}"}
74
- @logger.log_verbose
75
- @logger.log " Length: #{encoded.length} bytes"
59
+ encoded.to_yaml.each_line{|line| @logger.log_verbose " #{line}"}
60
+
76
61
  @logger.log
77
62
 
78
63
  return encoded
@@ -88,7 +73,7 @@ module KineticRuby
88
73
  end
89
74
 
90
75
  @logger.log
91
- @logger.log "Kinetic Protocol protobuf encode/decode test passed!"
76
+ @logger.log 'Kinetic Protocol protobuf encode/decode test passed!'
92
77
  @logger.log
93
78
  end
94
79
 
@@ -1,47 +1,46 @@
1
- require_relative 'kinetic-ruby'
1
+ require 'socket'
2
2
 
3
3
  $kinetic_server = nil
4
4
 
5
5
  module KineticRuby
6
6
 
7
+ DEFAULT_KINETIC_PORT = 8123
8
+ TEST_KINETIC_PORT = 8999
9
+
7
10
  class Server
8
11
 
9
- def initialize(port = nil, logger = nil)
10
- port ||= DEFAULT_KINETIC_PORT
11
- raise "Invalid Kinetic test server port specified (port: #{port})" if !port || port < 0
12
- @port = port
13
- @logger = logger
12
+ attr_reader :host, :port, :connected
13
+
14
+ def initialize(port = DEFAULT_KINETIC_PORT, log_level=Logger::LOG_LEVEL_INFO)
15
+ @host = 'localhost'
16
+ @port ||= DEFAULT_KINETIC_PORT
17
+ raise "Invalid Kinetic test server port specified (port: #{port})" if !@port || @port < 0
18
+ @logger = Logger.new(log_level)
19
+ @proto = Proto.new(@logger)
14
20
  @server = nil
15
21
  @worker = nil
16
- @listeners = []
17
- end
18
-
19
- def report(message='')
20
- $stderr.flush
21
- $stdout.flush
22
- puts message
23
- $stderr.flush
24
- $stdout.flush
22
+ @clients = []
23
+ @logger.log "Kinetic Ruby test device server started!"
25
24
  end
26
25
 
27
- def report_banner(message)
28
- report "\n#{message}\n#{'='*message.length}\n\n"
26
+ def connected
27
+ !@server.nil?
29
28
  end
30
29
 
31
30
  def report_buffer(buf)
32
31
  bytes = buf.bytes
33
32
  row_len = 16
34
- report "Raw Data (length=#{buf.count}):"
33
+ @logger.log "Raw Data (length=#{buf.count}):"
35
34
  while !bytes.empty?
36
35
  row_len = bytes.count >= row_len ? row_len : bytes.count
37
- report " row_len: #{row_len}"
36
+ @logger.log " row_len: #{row_len}"
38
37
  row = bytes.slice!(row_len)
39
- report " row: #{row.inspect}"
38
+ @logger.log " row: #{row.inspect}"
40
39
  msg = " "
41
40
  row.each do |b|
42
41
  msg += sprintf("0x%02X", b)
43
42
  end
44
- report msg
43
+ @logger.log msg
45
44
  end
46
45
  report
47
46
  end
@@ -49,67 +48,101 @@ module KineticRuby
49
48
  def start
50
49
  return unless @server.nil?
51
50
 
52
- @server = TCPServer.new @port
53
- @listeners = []
51
+ @server = TCPServer.new(@host, @port)
54
52
 
55
53
  # Setup handler for signaled shutdown (via ctrl+c)
56
54
  trap("INT") do
57
- report "Kinetic Test Server: INT triggered Kintic Test Server shutdown"
55
+ @logger.log "Kinetic Test Server: INT triggered Kintic Test Server shutdown"
58
56
  shutdown
59
57
  end
60
58
 
61
59
  # Create worker thread for test server to run in so we can continue
62
60
  @worker = Thread.new do
63
- report "Kinetic Test Server: Listening for Kinetic clients..."
61
+ @logger.log "Kinetic Test Server: Listening for Kinetic clients..."
64
62
  loop do
65
- @listeners << Thread.start(@server.accept) do |client|
66
- report "Kinetic Test Server: Connected to #{client.inspect}"
67
- request = ""
68
- while request += client.getc # Read characters from socket
63
+ client = nil
64
+ begin
65
+ client, client_info = @server.accept
66
+ rescue Exception => e
67
+ @logger.log "Kinetic Test Server: EXCEPTION during accept!\n" +
68
+ " #{e.inspect}\n" +
69
+ " #{e.message}\n #{e.backtrace.join(" \n")}"
70
+ next if client.nil?
71
+ end
69
72
 
70
- request_match = request.match(/^read\((\d+)\)/)
73
+ next if client.nil?
74
+
75
+ @logger.log "Kinetic Test Server: Connected to #{client.inspect}"
76
+ request = ''
77
+ data = nil
78
+ pdu = nil
79
+ disconnect = false
80
+
81
+ while !disconnect
82
+ begin
83
+ data = client.recv(1024)
84
+ rescue IO::WaitReadable
85
+ @logger.log("IO:WaitReadable");
86
+ IO.select([client])
87
+ retry
88
+ rescue Exception => e
89
+ @logger.logv "Kinetic Test Server: EXCEPTION during receive!\n" +
90
+ " #{e.inspect}\n" +
91
+ " #{e.message}\n #{e.backtrace.join(" \n")}"
92
+ disconnect = true
93
+ next
94
+ end
95
+
96
+ if (data.nil? || data.empty?)
97
+ @logger.log "Kinetic Test Server: Client #{client.inspect} disconnected!"
98
+ disconnect = true
99
+ next
100
+ end
101
+
102
+ # Incrementally parse PDU until complete
103
+ if request[0] == KineticRuby::Proto::VERSION_PREFIX && request.length >= 9
104
+ pdu ||= PDU.new(@Logger)
105
+ pdu.update(request)
106
+ end
71
107
 
108
+ # Otherwise, handle custom test requests
109
+ if pdu.nil?
110
+ request_match = request.match(/^read\((\d+)\)/)
72
111
  if request_match
73
112
  len = request_match[1].to_i
74
- response = "G"*len
75
- report "Kinetic Test Server: Responding to 'read(#{len})' w/ '#{response}'"
113
+ response = 'G'*len
114
+ @logger.log "Kinetic Test Server: Responding to 'read(#{len})' w/ '#{response}'"
76
115
  client.write response
77
116
  request = ''
78
-
79
117
  elsif request =~ /^readProto()/
80
- proto = KineticRuby::Proto.new
81
- response = proto.test_encode
82
- report "Kinetic Test Server: Responding to 'read(#{len})' w/ dummy protobuf (#{response.length} bytes)"
118
+ response = @proto.test_encode
119
+ @logger.log "Kinetic Test Server: Responding to 'read(#{len})' w/ dummy @protobuf (#{response.length} bytes)"
83
120
  client.write response
84
121
  request = ''
85
-
86
- # elsif request.length > 20
87
- # report_banner "Received unknown data: length=#{request.length}"
88
- # report " requst.inspect"
89
- # report_buffer(request)
90
-
91
122
  end
92
-
93
123
  end
94
- report "Kinetic Test Server: Client #{client.inspect} disconnected!"
124
+
125
+ @logger.log "Kinetic Test Server: Client #{client.inspect} disconnected!"
126
+ client.close
127
+ @logger.log "Kinetic Test Server: Client connection shutdown successfully"
95
128
  end
96
129
  end
97
130
  end
98
-
99
131
  end
100
132
 
101
133
  def shutdown
102
134
  return if @server.nil?
103
- report "Kinetic Test Server: shutting down..."
104
- @listeners.each do |client|
105
- client.join(0.3) if client.alive?
135
+ @logger.log "Kinetic Test Server: shutting down..."
136
+ if @worker
137
+ @worker.exit
138
+ @worker.join(2)
139
+ @worker = nil
106
140
  end
107
- @listeners = []
108
- @worker.exit
109
- @worker = nil
110
- @server.close
111
- @server = nil
112
- report "Kinetic Test Server: shutdown complete"
141
+ if @server
142
+ @server.close
143
+ @server = nil
144
+ end
145
+ @logger.log "Kinetic Test Server: shutdown complete"
113
146
  end
114
147
 
115
148
  end
data/lib/version.rb ADDED
@@ -0,0 +1,4 @@
1
+ module KineticRuby
2
+ VERSION = '0.5.0'
3
+ PROTOCOL_VERSION = 'v2.0.4'
4
+ end
@@ -0,0 +1,4 @@
1
+ module KineticRuby
2
+ VERSION = '0.5.0'
3
+ PROTOCOL_VERSION = '<%= proto_ver %>'
4
+ end
@@ -1,21 +1,31 @@
1
1
  require 'rake'
2
- require 'socket'
3
2
  require_relative '../kinetic-ruby' unless defined? KineticRuby
4
3
 
5
- namespace :server do
4
+ namespace :kinetic do
5
+ namespace :server do
6
6
 
7
- desc "Start Kinetic Test Server"
8
- task :start, :port, :log do |t, args|
9
- $kinetic_server ||= KineticRuby::Server.new(args[:port], args[:log])
10
- $kinetic_server.start
11
- end
7
+ desc "Start Kinetic Test Server"
8
+ task :start, :port, :log do |t, args|
9
+ if args[:port]
10
+ if args[:log]
11
+ $kinetic_server ||= KineticRuby::Server.new(args[:port], args[:log])
12
+ else
13
+ $kinetic_server ||= KineticRuby::Server.new(args[:port])
14
+ end
15
+ else
16
+ $kinetic_server ||= KineticRuby::Server.new
17
+ end
18
+ $kinetic_server.start
19
+ sleep 2.0
20
+ end
12
21
 
13
- desc "Shutdown Kinetic Test Server"
14
- task :shutdown do
15
- $kinetic_server.shutdown unless $kinetic_server.nil?
16
- $kinetic_server = nil
17
- end
22
+ desc "Shutdown Kinetic Test Server"
23
+ task :shutdown do
24
+ $kinetic_server.shutdown unless $kinetic_server.nil?
25
+ $kinetic_server = nil
26
+ end
18
27
 
28
+ end
19
29
  end
20
30
 
21
31
  # This block of code will be run prior to Rake instance terminating
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kinetic-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-29 00:00:00.000000000 Z
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -54,7 +54,8 @@ dependencies:
54
54
  version: '0'
55
55
  description: Seagate Kinetic Protocol implementation and examples for developing Kinetic
56
56
  clients in Ruby
57
- email: greg.williams@atomicobject.com
57
+ email:
58
+ - greg.williams@atomicobject.com
58
59
  executables: []
59
60
  extensions: []
60
61
  extra_rdoc_files: []
@@ -62,24 +63,26 @@ files:
62
63
  - README.md
63
64
  - Rakefile
64
65
  - LICENSE
65
- - ./lib/kinetic-ruby.rb
66
- - ./lib/kinetic_logger.rb
67
- - ./lib/kinetic_proto.rb
68
- - ./lib/kinetic_server.rb
69
- - ./lib/protobuf/kinetic.pb.rb
70
- - ./tasks/kinetic-ruby.rake
71
- - ./vendor/kinetic-protocol/kinetic.proto
72
- - ./vendor/kinetic-protocol/README.md
66
+ - lib/kinetic-ruby.rb
67
+ - lib/kinetic_logger.rb
68
+ - lib/kinetic_pdu.rb
69
+ - lib/kinetic_proto.rb
70
+ - lib/kinetic_server.rb
71
+ - lib/protobuf/kinetic.pb.rb
72
+ - lib/version.rb
73
+ - lib/version.rb.erb
74
+ - tasks/kinetic-ruby.rake
75
+ - vendor/kinetic-protocol/kinetic.proto
76
+ - vendor/kinetic-protocol/README.md
73
77
  homepage: http://github.com/atomicobject/kinetic-ruby
74
78
  licenses:
75
79
  - LGPL-2.1
76
80
  metadata: {}
77
81
  post_install_message:
78
- rdoc_options:
79
- - --charset=UTF-8
82
+ rdoc_options: []
80
83
  require_paths:
81
84
  - lib
82
- - tasks
85
+ - lib/protobuf
83
86
  required_ruby_version: !ruby/object:Gem::Requirement
84
87
  requirements:
85
88
  - - '>='
@@ -94,6 +97,6 @@ requirements: []
94
97
  rubyforge_project:
95
98
  rubygems_version: 2.0.14
96
99
  signing_key:
97
- specification_version: 2
100
+ specification_version: 4
98
101
  summary: Seagate Kinetic Protocol library for Ruby using Kinetic Protocol v2.0.4
99
102
  test_files: []