leofs_manager_client 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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