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.
- data/lib/leofs_manager_client/leofs_manager_models.rb +10 -0
- data/lib/leofs_manager_client.rb +15 -7
- data/spec/dummy_tcp_server.rb +143 -0
- data/spec/leofs_manager_client_spec.rb +29 -140
- metadata +4 -2
@@ -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
|
data/lib/leofs_manager_client.rb
CHANGED
@@ -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.
|
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
|
-
|
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
|
157
|
-
Credential.new(sender(
|
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.
|
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
|
-
|
166
|
-
|
167
|
-
end
|
59
|
+
its(:status) { should be_a Status }
|
60
|
+
its("status.system_info") { should be_a Status::System }
|
168
61
|
|
169
|
-
|
170
|
-
|
171
|
-
|
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 =
|
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
|
-
|
83
|
+
subject.du("node").should be_a StorageStat
|
196
84
|
end
|
197
85
|
end
|
198
86
|
|
199
|
-
describe "#
|
87
|
+
describe "#s3_create_key" do
|
200
88
|
it "returns Credential" do
|
201
|
-
|
89
|
+
subject.s3_create_key("user_id").should be_a Credential
|
202
90
|
end
|
203
91
|
end
|
204
92
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
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
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
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
|
-
|
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
|
-
|
124
|
+
subject.disconnect!.should be_nil
|
236
125
|
end
|
237
126
|
|
238
127
|
it "accepts no more requests" do
|
239
128
|
lambda {
|
240
|
-
|
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.
|
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-
|
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
|