leofs_manager_client 0.2.7 → 0.2.8

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.
@@ -121,6 +121,16 @@ module LeoFSManager
121
121
  end
122
122
  end
123
123
 
124
+ class User
125
+ attr_reader :user_id, :access_key_id, :created_at
126
+
127
+ def initialize(h)
128
+ @user_id = h[:user_id]
129
+ @access_key_id = h[:access_key_id]
130
+ @created_at = h[:created_at]
131
+ end
132
+ end
133
+
124
134
  # Endpoint
125
135
  class Endpoint
126
136
  # host of the endpoint
@@ -26,7 +26,7 @@ require "time"
26
26
  require_relative "leofs_manager_client/leofs_manager_models"
27
27
 
28
28
  module LeoFSManager
29
- VERSION = "0.2.7"
29
+ VERSION = "0.2.8"
30
30
 
31
31
  class Client
32
32
  CMD_VERSION = "version"
@@ -40,7 +40,8 @@ module LeoFSManager
40
40
  CMD_DU = "du %s"
41
41
  CMD_COMPACT = "compact %s"
42
42
  CMD_PURGE = "purge %s"
43
- CMD_S3_GEN_KEY = "s3-gen-key %s"
43
+ CMD_S3_CRE_KEY = "s3-create-key %s"
44
+ CMD_S3_GET_KEYS = "s3-get-keys"
44
45
  CMD_S3_SET_ENDPOINT = "s3-set-endpoint %s"
45
46
  CMD_S3_DEL_ENDPOINT = "s3-delete-endpoint %s"
46
47
  CMD_S3_GET_ENDPOINTS = "s3-get-endpoints"
@@ -153,8 +154,14 @@ module LeoFSManager
153
154
  # Generate credential for LeoFS
154
155
  # Return::
155
156
  # Credential
156
- def s3_gen_key(user_id)
157
- Credential.new(sender(CMD_S3_GEN_KEY % user_id))
157
+ def s3_create_key(user_id)
158
+ Credential.new(sender(CMD_S3_CRE_KEY % user_id))
159
+ end
160
+ alias s3_gen_key s3_create_key
161
+
162
+ def s3_get_keys
163
+ users = sender(CMD_S3_GET_KEYS)[:users]
164
+ users.map {|account| User.new(account) }
158
165
  end
159
166
 
160
167
  # Insert an endpoint in the system
@@ -269,7 +276,7 @@ module LeoFSManager
269
276
  response = nil
270
277
  begin
271
278
  @mutex.synchronize do
272
- @socket.puts command
279
+ @socket.print "#{command}\r\n"
273
280
  response = JSON.parse(@socket.readline, symbolize_names: true)
274
281
  end
275
282
  rescue EOFError => ex
@@ -277,9 +284,10 @@ module LeoFSManager
277
284
  reconnect
278
285
  rescue => ex
279
286
  raise "An Error occured: #{ex.class} (server: #{@current_server})\n#{ex.message}"
287
+ else
288
+ raise response[:error] if response.has_key?(:error)
289
+ return response
280
290
  end
281
- raise response[:error] if response.has_key?(:error)
282
- return response
283
291
  end
284
292
  end
285
293
  end
@@ -0,0 +1,143 @@
1
+ # ======================================================================
2
+ #
3
+ # LeoFS Manager Client
4
+ #
5
+ # Copyright (c) 2012 Rakuten, Inc.
6
+ #
7
+ # This file is provided to you under the Apache License,
8
+ # Version 2.0 (the "License"); you may not use this file
9
+ # except in compliance with the License. You may obtain
10
+ # a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing,
15
+ # software distributed under the License is distributed on an
16
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17
+ # KIND, either express or implied. See the License for the
18
+ # specific language governing permissions and limitations
19
+ # under the License.
20
+ #
21
+ # ======================================================================
22
+
23
+ require "socket"
24
+
25
+ module Dummy
26
+ module Response
27
+ Status = {
28
+ :system_info => {
29
+ :version => "0.10.1",
30
+ :n => "1",
31
+ :r => "1",
32
+ :w => "1",
33
+ :d => "1",
34
+ :ring_size => "128",
35
+ :ring_hash_cur => "2688134336",
36
+ :ring_hash_prev => "2688134336"},
37
+ :node_list => [
38
+ {
39
+ :type => "S",
40
+ :node => "storage_0@127.0.0.1",
41
+ :state => "running",
42
+ :ring_cur => "a039acc0",
43
+ :ring_prev => "a039acc0",
44
+ :when => "2012-09-21 15:08:22 +0900"
45
+ }, {
46
+ :type => "G",
47
+ :node => "gateway_0@127.0.0.1",
48
+ :state => "running",
49
+ :ring_cur => "a039acc0",
50
+ :ring_prev => "a039acc0",
51
+ :when => "2012-09-21 15:08:25 +0900"
52
+ }
53
+ ]
54
+ }.to_json
55
+
56
+ Whereis = {
57
+ :assigned_info => [
58
+ {
59
+ :node => "storage_0@127.0.0.1",
60
+ :vnode_id => "",
61
+ :size => "",
62
+ :clock => "",
63
+ :checksum => "",
64
+ :timestamp => "",
65
+ :delete => 0,
66
+ :num_of_chunks => 0
67
+ }
68
+ ]
69
+ }.to_json
70
+
71
+ S3GetEndpoints = {
72
+ :endpoints => [
73
+ {:endpoint => "s3.amazonaws.com", :created_at=>"2012-09-21 15:08:11 +0900"},
74
+ {:endpoint => "localhost", :created_at=>"2012-09-21 15:08:11 +0900"},
75
+ {:endpoint => "foo", :created_at=>"2012-09-21 18:51:08 +0900"},
76
+ {:endpoint => "leofs.org", :created_at=>"2012-09-21 15:08:11 +0900"}
77
+ ]
78
+ }.to_json
79
+
80
+ S3GetBuckets = {
81
+ :buckets => [
82
+ {
83
+ :bucket => "test",
84
+ :owner => "test",
85
+ :created_at => "2012-09-24 15:38:49 +0900"
86
+ }
87
+ ]
88
+ }.to_json
89
+
90
+ S3GetKeys = {
91
+ :users => [
92
+ { :access_key_id => "05236", :user_id => "_test_leofs_", :created_at => "2012-11-20 15:13:20 +0900" }
93
+ ]
94
+ }.to_json
95
+ end
96
+
97
+ Argument = "arg" # passed to command which requires some arguments.
98
+
99
+ # dummy Manager
100
+ class Manager
101
+ def initialize
102
+ t = Thread.new do
103
+ TCPServer.open(Host, Port) do |server|
104
+ loop do
105
+ begin
106
+ socket = server.accept
107
+ while line = socket.readline.split.first
108
+ response = process_line(line)
109
+ socket.puts(response)
110
+ end
111
+ rescue EOFError
112
+ end
113
+ end
114
+ end
115
+ end
116
+ nil until t.stop? # wait server start
117
+ end
118
+
119
+ def process_line(line)
120
+ line.rstrip!
121
+ begin
122
+ case line
123
+ when "status"
124
+ Response::Status
125
+ when "s3-get-buckets"
126
+ Response::S3GetBuckets
127
+ when "whereis"
128
+ Response::Whereis
129
+ when "s3-get-endpoints"
130
+ Response::S3GetEndpoints
131
+ when "s3-get-buckets"
132
+ Response::S3GetBuckets
133
+ when "s3-get-keys"
134
+ Response::S3GetKeys
135
+ else
136
+ { :result => line }.to_json
137
+ end
138
+ rescue => ex
139
+ { :error => ex.message }.to_json
140
+ end
141
+ end
142
+ end
143
+ end
@@ -20,121 +20,14 @@
20
20
  #
21
21
  # ======================================================================
22
22
 
23
- require "socket"
24
23
  require "json"
24
+ require_relative "dummy_tcp_server"
25
25
  require_relative "../lib/leofs_manager_client"
26
26
 
27
27
  Host = "localhost"
28
28
  Port = 50000
29
29
 
30
30
  $DEBUG = false
31
- Thread.abort_on_exception = true
32
-
33
- module Dummy
34
- module Response
35
- Status = {
36
- :system_info => {
37
- :version => "0.10.1",
38
- :n => "1",
39
- :r => "1",
40
- :w => "1",
41
- :d => "1",
42
- :ring_size => "128",
43
- :ring_hash_cur => "2688134336",
44
- :ring_hash_prev => "2688134336"},
45
- :node_list => [
46
- {
47
- :type => "S",
48
- :node => "storage_0@127.0.0.1",
49
- :state => "running",
50
- :ring_cur => "a039acc0",
51
- :ring_prev => "a039acc0",
52
- :when => "2012-09-21 15:08:22 +0900"
53
- }, {
54
- :type => "G",
55
- :node => "gateway_0@127.0.0.1",
56
- :state => "running",
57
- :ring_cur => "a039acc0",
58
- :ring_prev => "a039acc0",
59
- :when => "2012-09-21 15:08:25 +0900"
60
- }
61
- ]
62
- }.to_json
63
-
64
- Whereis = {
65
- :assigned_info => [
66
- {
67
- :node => "storage_0@127.0.0.1",
68
- :vnode_id => "",
69
- :size => "",
70
- :clock => "",
71
- :checksum => "",
72
- :timestamp => "",
73
- :delete => 0,
74
- :num_of_chunks => 0
75
- }
76
- ]
77
- }.to_json
78
-
79
- S3GetEndpoints = {
80
- :endpoints => [
81
- {:endpoint => "s3.amazonaws.com", :created_at=>"2012-09-21 15:08:11 +0900"},
82
- {:endpoint => "localhost", :created_at=>"2012-09-21 15:08:11 +0900"},
83
- {:endpoint => "foo", :created_at=>"2012-09-21 18:51:08 +0900"},
84
- {:endpoint => "leofs.org", :created_at=>"2012-09-21 15:08:11 +0900"}
85
- ]
86
- }.to_json
87
-
88
- S3GetBuckets = {
89
- :buckets => [
90
- {
91
- :bucket => "test",
92
- :owner => "test",
93
- :created_at => "2012-09-24 15:38:49 +0900"
94
- }
95
- ]
96
- }.to_json
97
- end
98
-
99
- Argument = "hoge" # passed to command which requires some arguments.
100
-
101
- # dummy Manager
102
- class Manager
103
- Thread.new do
104
- TCPServer.open(Host, Port) do |server|
105
- loop do
106
- begin
107
- socket = server.accept
108
- while line = socket.readline.split.first
109
- line.rstrip!
110
- begin
111
- case line
112
- when "status"
113
- result = Response::Status
114
- when "s3-get-buckets"
115
- result = Response::S3GetBuckets
116
- when "whereis"
117
- result = Response::Whereis
118
- when "s3-get-endpoints"
119
- result = Response::S3GetEndpoints
120
- when "s3-get-buckets"
121
- result = Response::S3GetBuckets
122
- else
123
- result = { :result => line }.to_json
124
- end
125
- rescue => ex
126
- result = { :error => ex.message }.to_json
127
- ensure
128
- socket.puts(result)
129
- end
130
- end
131
- rescue EOFError
132
- end
133
- end
134
- end
135
- end
136
- end
137
- end
138
31
 
139
32
  # key: api_name, value: num of args
140
33
  NoResultAPIs = {
@@ -156,24 +49,19 @@ describe LeoFSManager do
156
49
  Dummy::Manager.new
157
50
  @manager = Client.new("#{Host}:#{Port}")
158
51
  end
52
+ subject { @manager }
159
53
 
160
54
  it "raises error when it is passed invalid params" do
161
55
  lambda { Client.new }.should raise_error
162
56
  end
163
57
 
164
58
  describe "#status" do
165
- it "returns Status" do
166
- @manager.status.should be_a Status
167
- end
59
+ its(:status) { should be_a Status }
60
+ its("status.system_info") { should be_a Status::System }
168
61
 
169
- it "returns SystemInfo" do
170
- @manager.status.system_info.should be_a Status::System
171
- end
172
-
173
- it "returns Array of Node" do
174
- node_list = @manager.status.node_list
175
- node_list.should be_a Array
176
- node_list.each do |node|
62
+ its("status.node_list") do
63
+ should be_a Array
64
+ subject.each do |node|
177
65
  node.should be_a Status::Node
178
66
  end
179
67
  end
@@ -181,7 +69,7 @@ describe LeoFSManager do
181
69
 
182
70
  describe "#whereis" do
183
71
  it "returns Array of WhereInfo" do
184
- result = @manager.whereis("path")
72
+ result = subject.whereis("path")
185
73
  result.should be_a Array
186
74
  result.each do |where_info|
187
75
  where_info.should be_a AssignedFile
@@ -192,52 +80,53 @@ describe LeoFSManager do
192
80
 
193
81
  describe "#du" do
194
82
  it "returns DiskUsage" do
195
- @manager.du("node").should be_a StorageStat
83
+ subject.du("node").should be_a StorageStat
196
84
  end
197
85
  end
198
86
 
199
- describe "#s3_gen_key" do
87
+ describe "#s3_create_key" do
200
88
  it "returns Credential" do
201
- @manager.s3_gen_key("user_id").should be_a Credential
89
+ subject.s3_create_key("user_id").should be_a Credential
202
90
  end
203
91
  end
204
92
 
205
- describe "#s3_get_endpoints" do
206
- it "returns Arrany of Endpoint" do
207
- result = @manager.s3_get_endpoints
208
- result.should be_a Array
209
- result.each do |endpoint|
210
- endpoint.should be_a Endpoint
211
- end
93
+ its(:s3_get_keys) do
94
+ should be_a Array
95
+ subject.each do |account|
96
+ account.should be_a User
212
97
  end
213
98
  end
214
99
 
215
- describe "#s3_get_buckets" do
216
- it "returns Array of Bucket" do
217
- result = @manager.s3_get_buckets
218
- result.should be_a Array
219
- result.each do |buckets|
220
- buckets.should be_a Bucket
221
- end
100
+ its(:s3_get_endpoints) do
101
+ should be_a Array
102
+ subject.each do |endpoint|
103
+ endpoint.should be_a Endpoint
104
+ end
105
+ end
106
+
107
+ its(:s3_get_buckets) do
108
+ should be_a Array
109
+ subject.each do |buckets|
110
+ buckets.should be_a Bucket
222
111
  end
223
112
  end
224
113
 
225
114
  NoResultAPIs.each do |api, num_of_args|
226
115
  describe "##{api}" do
227
116
  it "returns nil" do
228
- @manager.send(api, *(["argument"] * num_of_args)).should be_nil
117
+ subject.send(api, *(["argument"] * num_of_args)).should be_nil
229
118
  end
230
119
  end
231
120
  end
232
121
 
233
122
  describe "#disconnect!" do
234
123
  it "returns nil" do
235
- @manager.disconnect!.should be_nil
124
+ subject.disconnect!.should be_nil
236
125
  end
237
126
 
238
127
  it "accepts no more requests" do
239
128
  lambda {
240
- @manager.status
129
+ subject.status
241
130
  }.should raise_error
242
131
  end
243
132
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leofs_manager_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-22 00:00:00.000000000 Z
13
+ date: 2012-11-20 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Client for LeoFS Manager
16
16
  email:
@@ -27,6 +27,7 @@ files:
27
27
  - leofs_manager_client.gemspec
28
28
  - lib/leofs_manager_client.rb
29
29
  - lib/leofs_manager_client/leofs_manager_models.rb
30
+ - spec/dummy_tcp_server.rb
30
31
  - spec/leofs_manager_client_spec.rb
31
32
  homepage: ''
32
33
  licenses: []
@@ -53,4 +54,5 @@ signing_key:
53
54
  specification_version: 3
54
55
  summary: Client for LeoFS Manager
55
56
  test_files:
57
+ - spec/dummy_tcp_server.rb
56
58
  - spec/leofs_manager_client_spec.rb