aviator 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTORS.txt +11 -0
- data/README.md +1 -0
- data/lib/aviator/core/cli/describer.rb +2 -2
- data/lib/aviator/core/response.rb +11 -3
- data/lib/aviator/core/service.rb +19 -2
- data/lib/aviator/core/session.rb +112 -37
- data/lib/aviator/openstack/identity/requests/v3/public/create_token.rb +2 -3
- data/lib/aviator/openstack/provider.rb +4 -11
- data/lib/aviator/version.rb +1 -1
- data/test/aviator/core/cli/describer_test.rb +8 -8
- data/test/aviator/core/response_test.rb +41 -0
- data/test/aviator/core/session_test.rb +62 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8e26c692d08f4a3414f7b3ff14b120cee73bad5
|
4
|
+
data.tar.gz: 9d60456a3afe9eed57d27acd626a08c3a987b3be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffae1b956dc180c585cfa847889a9e0e8267843600e9bac5471a25e8781797ebf6eccb3cedeb05501375372aeedc15348d7b963790bd18682eddce2387cc5a95
|
7
|
+
data.tar.gz: f9ebba7e141c1f886d17573b04b0dd60b1708e7c814b3cbbaf6493096be8d78dd4bbc76a52a83c308df63d0fe9e0e8eaacbffc76f907d617b1e9ea7d68cefceb
|
data/CONTRIBUTORS.txt
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Adrian Peterson Co <adrianpco@gmail.com>
|
2
|
+
Alfonso Juan Dillera <aj.dillera@gmail.com>
|
3
|
+
Alvin Garcia <agarcia1337@gmail.com>
|
4
|
+
Colleen Murphy <colleen@puppetlabs.com>
|
5
|
+
Lewis Marshall <lewis@technoplusit.co.uk>
|
6
|
+
Mark Maglana <mmaglana@gmail.com>
|
7
|
+
Nate West <natescott.west@gmail.com>
|
8
|
+
Ricardo Rocha <rocha.porto@gmail.com>
|
9
|
+
Stephen Paul Suarez <ssuarez@exist.com>
|
10
|
+
Weto Olaguer <wenceslaoolaguer@gmail.com>
|
11
|
+
Behrooz Shabani <everplays@gmail.com>
|
data/README.md
CHANGED
@@ -6,5 +6,6 @@
|
|
6
6
|
[![Code Climate](https://codeclimate.com/github/aviator/aviator.png)](https://codeclimate.com/github/aviator/aviator)
|
7
7
|
[![Gem Version](https://badge.fury.io/rb/aviator.png)](http://badge.fury.io/rb/aviator)
|
8
8
|
|
9
|
+
Aviator complies with <a href="http://semver.org/">Semantic Versioning</a>.
|
9
10
|
|
10
11
|
<a href="http://aviator.github.io/www/">Usage and Installation</a>
|
@@ -36,7 +36,7 @@ module Aviator
|
|
36
36
|
request_class = "Aviator::#{ provider_name.camelize }::#{ service_name.camelize }::Requests::"\
|
37
37
|
"#{ api_version.camelize }::#{ endpoint_type.camelize }::#{ request_name.camelize }".constantize
|
38
38
|
|
39
|
-
display = ":
|
39
|
+
display = "Request: #{ request_name }\n"
|
40
40
|
|
41
41
|
|
42
42
|
# Build the parameters
|
@@ -83,7 +83,7 @@ module Aviator
|
|
83
83
|
# Build the sample code
|
84
84
|
display << "\nSample Code:\n"
|
85
85
|
|
86
|
-
display << " session
|
86
|
+
display << " session.request(:#{ service_name }_service, :#{ request_name })"
|
87
87
|
|
88
88
|
if params && params.length > 0
|
89
89
|
display << " do |params|\n"
|
@@ -14,7 +14,7 @@ module Aviator
|
|
14
14
|
|
15
15
|
|
16
16
|
def body
|
17
|
-
if raw_body.length > 0
|
17
|
+
@body ||= if raw_body.length > 0
|
18
18
|
if Aviator::Compatibility::RUBY_1_8_MODE
|
19
19
|
clean_body = raw_body.gsub(/\\ /, ' ')
|
20
20
|
else
|
@@ -29,14 +29,22 @@ module Aviator
|
|
29
29
|
|
30
30
|
|
31
31
|
def headers
|
32
|
-
Hashish.new(@response.headers)
|
32
|
+
@headers ||= Hashish.new(@response.headers)
|
33
33
|
end
|
34
34
|
|
35
35
|
|
36
|
+
def to_hash
|
37
|
+
Hashish.new({
|
38
|
+
:status => status,
|
39
|
+
:headers => headers,
|
40
|
+
:body => body
|
41
|
+
})
|
42
|
+
end
|
43
|
+
|
36
44
|
private
|
37
45
|
|
38
46
|
def raw_body
|
39
|
-
@response.body
|
47
|
+
@raw_body ||= @response.body
|
40
48
|
end
|
41
49
|
|
42
50
|
end
|
data/lib/aviator/core/service.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
module Aviator
|
2
2
|
|
3
|
+
#
|
4
|
+
# Manages a service
|
5
|
+
#
|
3
6
|
class Service
|
4
7
|
|
5
8
|
class AccessDetailsNotDefinedError < StandardError
|
@@ -35,7 +38,6 @@ module Aviator
|
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
38
|
-
|
39
41
|
class UnknownRequestError < StandardError
|
40
42
|
def initialize(request_name, options)
|
41
43
|
super "Unknown request #{ request_name } #{ options }."
|
@@ -75,7 +77,9 @@ module Aviator
|
|
75
77
|
load_requests
|
76
78
|
end
|
77
79
|
|
78
|
-
|
80
|
+
#
|
81
|
+
# No longer recommended for public use. Use Aviator::Session#request instead
|
82
|
+
#
|
79
83
|
def request(request_name, options={}, ¶ms)
|
80
84
|
if options[:api_version].nil? && @default_options[:api_version]
|
81
85
|
options[:api_version] = @default_options[:api_version]
|
@@ -93,6 +97,19 @@ module Aviator
|
|
93
97
|
|
94
98
|
raise UnknownRequestError.new(request_name, options) unless request_class
|
95
99
|
|
100
|
+
# Always use :params over ¶ms if provided
|
101
|
+
if options[:params]
|
102
|
+
params = lambda do |params|
|
103
|
+
options[:params].each do |key, value|
|
104
|
+
begin
|
105
|
+
params[key] = value
|
106
|
+
rescue NameError => e
|
107
|
+
raise NameError.new("Unknown param name '#{key}'")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
96
113
|
request = request_class.new(session_data, ¶ms)
|
97
114
|
|
98
115
|
response = http_connection.send(request.http_method) do |r|
|
data/lib/aviator/core/session.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Mark Maglana (mmaglana@gmail.com)
|
3
|
+
# Copyright:: Copyright (c) 2014 Mark Maglana
|
4
|
+
# License:: Distributed under the MIT license
|
5
|
+
# Homepage:: http://aviator.github.io/www/
|
6
|
+
#
|
1
7
|
module Aviator
|
2
8
|
|
3
9
|
#
|
4
|
-
# Manages a provider (e.g. OpenStack) session
|
5
|
-
#
|
6
|
-
# Author:: Mark Maglana (mmaglana@gmail.com)
|
7
|
-
# Copyright:: Copyright (c) 2014 Mark Maglana
|
8
|
-
# License:: Distributed under the MIT license
|
9
|
-
# Homepage:: http://aviator.github.io/www/
|
10
|
+
# Manages a provider (e.g. OpenStack) session and serves as the entry point
|
11
|
+
# for a consumer class/object. See Session::new for notes on usage.
|
10
12
|
#
|
11
13
|
class Session
|
12
14
|
|
@@ -51,8 +53,7 @@ module Aviator
|
|
51
53
|
end
|
52
54
|
|
53
55
|
#
|
54
|
-
# Create a new Session instance
|
55
|
-
# have many forms discussed below.
|
56
|
+
# Create a new Session instance.
|
56
57
|
#
|
57
58
|
# <b>Initialize with a config file</b>
|
58
59
|
#
|
@@ -73,17 +74,20 @@ module Aviator
|
|
73
74
|
# password: mypassword
|
74
75
|
# tenant_name: myproject
|
75
76
|
#
|
77
|
+
# <b>SIDENOTE:</b> For more information about the <tt>validator</tt> member, see Session#validate.
|
78
|
+
#
|
76
79
|
# Once the session has been instantiated, you may authenticate against the
|
77
80
|
# provider as follows:
|
78
81
|
#
|
79
82
|
# session.authenticate
|
80
83
|
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
84
|
+
# The members you put under <tt>auth_credentials</tt> will depend on the request
|
85
|
+
# class you declare under <tt>auth_service:request</tt> and what parameters it
|
86
|
+
# accepts. To know more about a request class and its parameters, you can use
|
87
|
+
# the CLI tool <tt>aviator describe</tt> or view the request definition file directly.
|
88
|
+
#
|
89
|
+
# If writing the <tt>auth_credentials</tt> in the config file is not acceptable,
|
90
|
+
# you may omit it and just supply the credentials at runtime. For example:
|
87
91
|
#
|
88
92
|
# session.authenticate do |params|
|
89
93
|
# params.username = ARGV[0]
|
@@ -91,7 +95,7 @@ module Aviator
|
|
91
95
|
# params.tenant_name = ARGV[2]
|
92
96
|
# end
|
93
97
|
#
|
94
|
-
#
|
98
|
+
# See Session#authenticate for more info.
|
95
99
|
#
|
96
100
|
# Note that while the example config file above only has one environment (production),
|
97
101
|
# you can declare an arbitrary number of environments in your config file. Shifting
|
@@ -100,8 +104,8 @@ module Aviator
|
|
100
104
|
#
|
101
105
|
# <b>Initialize with an in-memory hash</b>
|
102
106
|
#
|
103
|
-
# You can create an in-memory hash
|
104
|
-
#
|
107
|
+
# You can create an in-memory hash with a structure similar to the config file but without
|
108
|
+
# the environment name. For example:
|
105
109
|
#
|
106
110
|
# configuration = {
|
107
111
|
# :provider => 'openstack',
|
@@ -150,12 +154,14 @@ module Aviator
|
|
150
154
|
end
|
151
155
|
|
152
156
|
#
|
153
|
-
# Authenticates against the
|
154
|
-
#
|
157
|
+
# Authenticates against the backend provider using the auth_service request class
|
158
|
+
# declared in the session's configuration. Please see Session.new for more information
|
155
159
|
# on declaring the request class to use for authentication.
|
156
160
|
#
|
157
|
-
#
|
158
|
-
#
|
161
|
+
# <b>Request params block</b>
|
162
|
+
#
|
163
|
+
# If the auth_service request class accepts parameters, you may supply that
|
164
|
+
# as a block and it will be directly passed to the request. For example:
|
159
165
|
#
|
160
166
|
# session = Aviator::Session.new(:config => config)
|
161
167
|
# session.authenticate do |params|
|
@@ -164,9 +170,12 @@ module Aviator
|
|
164
170
|
# params.tenant_name = project
|
165
171
|
# end
|
166
172
|
#
|
167
|
-
#
|
173
|
+
# If your configuration happens to have an <tt>auth_credentials</tt> in it, those
|
174
|
+
# will be overridden by this block.
|
168
175
|
#
|
169
|
-
#
|
176
|
+
# <b>Treat parameters as a hash</b>
|
177
|
+
#
|
178
|
+
# You can also treat the params struct like a hash with the attribute
|
170
179
|
# names as the keys. For example, we can rewrite the above as:
|
171
180
|
#
|
172
181
|
# session = Aviator::Session.new(:config => config)
|
@@ -178,7 +187,29 @@ module Aviator
|
|
178
187
|
#
|
179
188
|
# Keys can be symbols or strings.
|
180
189
|
#
|
181
|
-
|
190
|
+
# <b>Use a hash argument instead of a block</b>
|
191
|
+
#
|
192
|
+
# You may also provide request params as an argument instead of a block. This is
|
193
|
+
# especially useful if you want to mock Aviator as it's easier to specify ordinary
|
194
|
+
# argument expectations over blocks. Further rewriting the example above,
|
195
|
+
# we end up with:
|
196
|
+
#
|
197
|
+
# session = Aviator::Session.new(:config => config)
|
198
|
+
# session.authenticate :params => {
|
199
|
+
# :username => username,
|
200
|
+
# :password => password,
|
201
|
+
# :tenant_name => project
|
202
|
+
# }
|
203
|
+
#
|
204
|
+
# If both <tt>:params</tt> and a block are provided, the <tt>:params</tt>
|
205
|
+
# values will be used and the block ignored.
|
206
|
+
#
|
207
|
+
# <b>Success requirements</b>
|
208
|
+
#
|
209
|
+
# Expects an HTTP status 200 or 201 response from the backend. Any other
|
210
|
+
# status is treated as a failure.
|
211
|
+
#
|
212
|
+
def authenticate(opts={}, &block)
|
182
213
|
block ||= lambda do |params|
|
183
214
|
config[:auth_credentials].each do |key, value|
|
184
215
|
begin
|
@@ -189,7 +220,7 @@ module Aviator
|
|
189
220
|
end
|
190
221
|
end
|
191
222
|
|
192
|
-
response = auth_service.request
|
223
|
+
response = auth_service.request(config[:auth_service][:request].to_sym, opts, &block)
|
193
224
|
|
194
225
|
if [200, 201].include? response.status
|
195
226
|
@auth_response = Hashish.new({
|
@@ -204,7 +235,10 @@ module Aviator
|
|
204
235
|
end
|
205
236
|
|
206
237
|
#
|
207
|
-
# Returns true if the session has been authenticated.
|
238
|
+
# Returns true if the session has been authenticated. Note that this relies on
|
239
|
+
# cached response from a previous run of Session#authenticate if one was made.
|
240
|
+
# If you want to check against the backend provider if the session is still valid,
|
241
|
+
# use Session#validate instead.
|
208
242
|
#
|
209
243
|
def authenticated?
|
210
244
|
!auth_response.nil?
|
@@ -247,7 +281,7 @@ module Aviator
|
|
247
281
|
end
|
248
282
|
|
249
283
|
|
250
|
-
def method_missing(name, *args, &block)
|
284
|
+
def method_missing(name, *args, &block) # :nodoc:
|
251
285
|
service_name_parts = name.to_s.match(/^(\w+)_service$/)
|
252
286
|
|
253
287
|
if service_name_parts
|
@@ -262,7 +296,8 @@ module Aviator
|
|
262
296
|
# Creates a new Session object from a previous session's dump. See Session#dump for
|
263
297
|
# more information.
|
264
298
|
#
|
265
|
-
# If you want the newly deserialized session to log its output,
|
299
|
+
# If you want the newly deserialized session to log its output, add a <tt>:log_file</tt>
|
300
|
+
# option.
|
266
301
|
#
|
267
302
|
# Aviator::Session.load(session_dump_str, :log_file => 'path/to/aviator.log')
|
268
303
|
#
|
@@ -301,37 +336,77 @@ module Aviator
|
|
301
336
|
#
|
302
337
|
# Keys can be symbols or strings.
|
303
338
|
#
|
339
|
+
# You may also provide parameters as an argument instead of a block. This is
|
340
|
+
# especially useful when mocking Aviator as it's easier to specify ordinary
|
341
|
+
# argument expectations over blocks. Further rewriting the example above,
|
342
|
+
# we end up with:
|
343
|
+
#
|
344
|
+
# session.request :compute_service, :create_server, :params => {
|
345
|
+
# :name => "My Server",
|
346
|
+
# :image_ref => "7cae8c8e-fb01-4a88-bba3-ae0fcb1dbe29",
|
347
|
+
# :flavor_ref => "fa283da1-59a5-4245-8569-b6eadf69f10b"
|
348
|
+
# }
|
349
|
+
#
|
350
|
+
# If both <tt>:params</tt> and a block are provided, the values in <tt>:params</tt>
|
351
|
+
# will be used and the block ignored.
|
352
|
+
#
|
353
|
+
# <b>Return Value</b>
|
354
|
+
#
|
355
|
+
# The return value will be an instance of Hashish, a lightweight replacement for
|
356
|
+
# activesupport's HashWithIndifferentAccess, with the following structure:
|
357
|
+
#
|
358
|
+
# {
|
359
|
+
# :status => 200,
|
360
|
+
# :headers => {
|
361
|
+
# 'X-Auth-Token' => 'd9186f45ce5446eaa0adc9def1c46f5f',
|
362
|
+
# 'Content-Type' => 'application/json'
|
363
|
+
# },
|
364
|
+
# :body => {
|
365
|
+
# :some_key => :some_value
|
366
|
+
# }
|
367
|
+
# }
|
368
|
+
#
|
369
|
+
# Note that the members in <tt>:headers</tt> and <tt>:body</tt> will vary depending
|
370
|
+
# on the provider and the request that was made.
|
371
|
+
#
|
304
372
|
# ---
|
305
373
|
#
|
306
374
|
# <b>Request Options</b>
|
307
375
|
#
|
308
|
-
# You can further customize how the
|
309
|
-
# options to the
|
310
|
-
# will call the
|
376
|
+
# You can further customize how the method behaves by providing one or more
|
377
|
+
# options to the call. For example, assuming you are using the <tt>openstack</tt>
|
378
|
+
# provider, the following will call the <tt>:create_server</tt> request of the
|
379
|
+
# v1 API of <tt>:compute_service</tt>.
|
311
380
|
#
|
312
|
-
# session.request :compute_service, :create_server, :api_version => v1
|
381
|
+
# session.request :compute_service, :create_server, :api_version => v1, :params => params
|
313
382
|
#
|
314
383
|
# The available options vary depending on the provider. See the documentation
|
315
|
-
# on the provider's Provider class for more information (e.g. Aviator::
|
384
|
+
# on the provider's Provider class for more information (e.g. Aviator::Openstack::Provider)
|
316
385
|
#
|
317
|
-
def request(service_name, request_name, opts={}, &
|
386
|
+
def request(service_name, request_name, opts={}, &block)
|
318
387
|
service = send("#{service_name.to_s}_service")
|
319
|
-
service.request(request_name, opts, &
|
388
|
+
response = service.request(request_name, opts, &block)
|
389
|
+
response.to_hash
|
320
390
|
end
|
321
391
|
|
322
392
|
|
323
393
|
#
|
324
|
-
# Returns true if the session is still valid in the underlying provider. This method
|
325
|
-
#
|
394
|
+
# Returns true if the session is still valid in the underlying provider. This method calls
|
395
|
+
# the <tt>validator</tt> request class declared under <tt>auth_service</tt> in the
|
326
396
|
# configuration. The validator can be any request class as long as:
|
327
397
|
#
|
328
398
|
# * The request class exists!
|
399
|
+
# * Is not an anonymous request. Otherwise it will always return true.
|
329
400
|
# * Does not require any parameters
|
330
401
|
# * It returns an HTTP status 200 or 203 to indicate auth info validity.
|
331
402
|
# * It returns any other HTTP status to indicate that the auth info is invalid.
|
332
403
|
#
|
333
404
|
# See Session::new for an example on how to specify the request class to use for session validation.
|
334
405
|
#
|
406
|
+
# Note that this method requires the session to be previously authenticated otherwise a
|
407
|
+
# NotAuthenticatedError will be raised. If you just want to check if the session was previously
|
408
|
+
# authenticated, use Session#authenticated? instead.
|
409
|
+
#
|
335
410
|
def validate
|
336
411
|
raise NotAuthenticatedError.new unless authenticated?
|
337
412
|
raise ValidatorNotDefinedError.new unless config[:auth_service][:validator]
|
@@ -1,7 +1,6 @@
|
|
1
|
-
# Original work by Stephen Paul Suarez
|
2
|
-
# https://github.com/musashi-dev/aviator/blob/develop/lib/aviator/openstack/identity/v3/public/create_token.rb
|
3
|
-
|
4
1
|
module Aviator
|
2
|
+
# Original work by Stephen Paul Suarez
|
3
|
+
# https://github.com/musashi-dev/aviator/blob/develop/lib/aviator/openstack/identity/v3/public/create_token.rb
|
5
4
|
|
6
5
|
define_request :create_token, :inherit => [:openstack, :common, :v3, :public, :base] do
|
7
6
|
|
@@ -1,13 +1,6 @@
|
|
1
1
|
module Aviator
|
2
2
|
module Openstack
|
3
3
|
|
4
|
-
#
|
5
|
-
# Manages a provider (e.g. OpenStack) session.
|
6
|
-
#
|
7
|
-
# Author:: Mark Maglana (mmaglana@gmail.com)
|
8
|
-
# Copyright:: Copyright (c) 2014 Mark Maglana
|
9
|
-
# License:: Distributed under the MIT license
|
10
|
-
# Homepage:: http://aviator.github.io/www/
|
11
4
|
#
|
12
5
|
# <b>Request Options</b>
|
13
6
|
#
|
@@ -16,10 +9,10 @@ module Openstack
|
|
16
9
|
#
|
17
10
|
# :api_version => :v2::
|
18
11
|
# Forces Aviator to use the request class for the v2 API. For any other
|
19
|
-
# version, replace Note that this may throw an
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# environment. For example:
|
12
|
+
# version, replace :v2 with the desired one. Note that this may throw an
|
13
|
+
# error if no such request class for the given api version exists. If you
|
14
|
+
# want to globally specify the API version to use for a specific service,
|
15
|
+
# declare it in your config file under the correct environment. For example:
|
23
16
|
#
|
24
17
|
# production:
|
25
18
|
# provider: openstack
|
data/lib/aviator/version.rb
CHANGED
@@ -110,10 +110,10 @@ class Aviator::Test
|
|
110
110
|
request_class = build_request(provider, service, request_name)
|
111
111
|
|
112
112
|
expected = <<-EOF
|
113
|
-
:
|
113
|
+
Request: #{ request_name }
|
114
114
|
|
115
115
|
Sample Code:
|
116
|
-
session
|
116
|
+
session.request(:#{ service }_service, :#{ request_name })
|
117
117
|
EOF
|
118
118
|
|
119
119
|
output = klass.describe_request(
|
@@ -139,7 +139,7 @@ EOF
|
|
139
139
|
end
|
140
140
|
|
141
141
|
expected = <<-EOF
|
142
|
-
:
|
142
|
+
Request: #{ request_name }
|
143
143
|
|
144
144
|
Parameters:
|
145
145
|
+----------+-----------+
|
@@ -150,7 +150,7 @@ Parameters:
|
|
150
150
|
+----------+-----------+
|
151
151
|
|
152
152
|
Sample Code:
|
153
|
-
session
|
153
|
+
session.request(:#{ service }_service, :#{ request_name }) do |params|
|
154
154
|
params.another = value
|
155
155
|
params.theParam = value
|
156
156
|
end
|
@@ -179,7 +179,7 @@ EOF
|
|
179
179
|
end
|
180
180
|
|
181
181
|
expected = <<-EOF
|
182
|
-
:
|
182
|
+
Request: #{ request_name }
|
183
183
|
|
184
184
|
Parameters:
|
185
185
|
+--------------+-----------+---------------+
|
@@ -190,7 +190,7 @@ Parameters:
|
|
190
190
|
+--------------+-----------+---------------+
|
191
191
|
|
192
192
|
Sample Code:
|
193
|
-
session
|
193
|
+
session.request(:#{ service }_service, :#{ request_name }) do |params|
|
194
194
|
params.another_param = value
|
195
195
|
params.the_param = value
|
196
196
|
end
|
@@ -221,7 +221,7 @@ EOF
|
|
221
221
|
end
|
222
222
|
|
223
223
|
expected = <<-EOF
|
224
|
-
:
|
224
|
+
Request: #{ request_name }
|
225
225
|
|
226
226
|
Parameters:
|
227
227
|
+--------------+-----------+---------------+
|
@@ -232,7 +232,7 @@ Parameters:
|
|
232
232
|
+--------------+-----------+---------------+
|
233
233
|
|
234
234
|
Sample Code:
|
235
|
-
session
|
235
|
+
session.request(:#{ service }_service, :#{ request_name }) do |params|
|
236
236
|
params.another_param = value
|
237
237
|
params.the_param = value
|
238
238
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'mocha/setup'
|
3
|
+
|
4
|
+
|
5
|
+
class Aviator::Test
|
6
|
+
|
7
|
+
describe 'aviator/core/response' do
|
8
|
+
|
9
|
+
describe '#to_hash' do
|
10
|
+
|
11
|
+
it 'returns a Hashish instance representing the response' do
|
12
|
+
mock_http_response = mock('Faraday::Response')
|
13
|
+
mock_request = mock('Aviator::Request')
|
14
|
+
|
15
|
+
hashed_response = {
|
16
|
+
:status => 200,
|
17
|
+
:headers => {
|
18
|
+
:header1 => 'value1',
|
19
|
+
:header2 => 'value2'
|
20
|
+
},
|
21
|
+
:body => {
|
22
|
+
:body1 => 'bodyvalue1',
|
23
|
+
:body2 => 'bodyvalue2'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
mock_http_response.expects(:status).returns(hashed_response[:status])
|
28
|
+
mock_http_response.expects(:headers).returns(hashed_response[:headers])
|
29
|
+
mock_http_response.expects(:body).returns(hashed_response[:body].to_json)
|
30
|
+
|
31
|
+
response = Aviator::Response.new(mock_http_response, mock_request)
|
32
|
+
|
33
|
+
response.to_hash.must_equal Hashish.new(hashed_response)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -112,6 +112,33 @@ describe 'Aviator::Session' do
|
|
112
112
|
end
|
113
113
|
|
114
114
|
|
115
|
+
it 'authenticates against the auth service using the credentials in a params arg' do
|
116
|
+
# Keys below are dependent on whatever is declared in
|
117
|
+
# the request classes referenced by auth_service:request
|
118
|
+
# in the config file
|
119
|
+
params = {
|
120
|
+
'username' => 'someuser',
|
121
|
+
'password' => 'password'
|
122
|
+
}
|
123
|
+
|
124
|
+
mock_conn = mock('Faraday::Connection')
|
125
|
+
mock_http_req = mock('Faraday::Request')
|
126
|
+
mock_response = mock('Faraday::Response')
|
127
|
+
Faraday.expects(:new).returns(mock_conn)
|
128
|
+
mock_conn.expects(:post).yields(mock_http_req).returns(mock_response)
|
129
|
+
mock_http_req.expects(:url)
|
130
|
+
mock_http_req.expects(:body=).with(){|json| JSON.load(json) == params }
|
131
|
+
mock_response.expects(:status).returns(200)
|
132
|
+
mock_response.expects(:headers).returns({})
|
133
|
+
mock_response.expects(:body).returns({})
|
134
|
+
|
135
|
+
session = Aviator::Session.new(:config => valid_config[valid_env])
|
136
|
+
session.authenticate :params => params
|
137
|
+
|
138
|
+
session.authenticated?.must_equal true
|
139
|
+
end
|
140
|
+
|
141
|
+
|
115
142
|
it 'raises an AuthenticationError when authentication fails' do
|
116
143
|
Faraday.expects(:new).returns(mock_conn = mock('Faraday::Connection'))
|
117
144
|
mock_conn.expects(:post).returns(mock_response = mock('Faraday::Response'))
|
@@ -353,14 +380,48 @@ describe 'Aviator::Session' do
|
|
353
380
|
mock_response.stubs(:status).returns(200)
|
354
381
|
mock_response.stubs(:headers).returns({})
|
355
382
|
mock_response.stubs(:body).returns('{}')
|
383
|
+
hashed_response = {:response1 => :value1}
|
384
|
+
mock_response.stubs(:to_hash).returns(hashed_response)
|
356
385
|
mock_auth.expects(:request).returns(mock_response)
|
357
386
|
mock_compute.expects(:request).with(request_name, request_opts).yields(yielded_params).returns(mock_response)
|
358
387
|
|
359
388
|
session = Aviator::Session.new(:config => valid_config[valid_env])
|
360
389
|
session.authenticate
|
361
390
|
|
362
|
-
session.request :compute, request_name, request_opts, &request_params
|
391
|
+
response = session.request :compute, request_name, request_opts, &request_params
|
363
392
|
yielded_params.wont_be_empty
|
393
|
+
response.must_equal hashed_response
|
394
|
+
end
|
395
|
+
|
396
|
+
|
397
|
+
it 'passes the params arg to Service#request' do
|
398
|
+
request_name = :create_server
|
399
|
+
request_opts = {
|
400
|
+
:params => {
|
401
|
+
:key1 => :value1,
|
402
|
+
:key2 => :value2
|
403
|
+
}
|
404
|
+
}
|
405
|
+
|
406
|
+
mock_auth = mock('Aviator::Service')
|
407
|
+
mock_compute = mock('Aviator::Service')
|
408
|
+
mock_response = mock('Aviator::Response')
|
409
|
+
|
410
|
+
Aviator::Service.expects(:new).twice.returns(mock_auth, mock_compute)
|
411
|
+
mock_response.stubs(:status).returns(200)
|
412
|
+
mock_response.stubs(:headers).returns({:header1 => :headervalue1})
|
413
|
+
mock_response.stubs(:body).returns('{":bodykey1": "bodyvalue1"}')
|
414
|
+
hashed_response = {:responsekey1 => :responsevalue1}
|
415
|
+
mock_response.stubs(:to_hash).returns(hashed_response)
|
416
|
+
mock_auth.expects(:request).returns(mock_response)
|
417
|
+
mock_compute.expects(:request).with(request_name, request_opts).returns(mock_response)
|
418
|
+
|
419
|
+
session = Aviator::Session.new(:config => valid_config[valid_env])
|
420
|
+
session.authenticate
|
421
|
+
|
422
|
+
response = session.request :compute, request_name, request_opts
|
423
|
+
|
424
|
+
response.must_equal hashed_response
|
364
425
|
end
|
365
426
|
|
366
427
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aviator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Maglana
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -255,6 +255,7 @@ files:
|
|
255
255
|
- ".coveralls.yml"
|
256
256
|
- ".gitignore"
|
257
257
|
- ".travis.yml"
|
258
|
+
- CONTRIBUTORS.txt
|
258
259
|
- Gemfile
|
259
260
|
- Guardfile
|
260
261
|
- LICENSE.txt
|
@@ -358,6 +359,7 @@ files:
|
|
358
359
|
- test/aviator/core/cli/describer_test.rb
|
359
360
|
- test/aviator/core/request_builder_test.rb
|
360
361
|
- test/aviator/core/request_test.rb
|
362
|
+
- test/aviator/core/response_test.rb
|
361
363
|
- test/aviator/core/service_test.rb
|
362
364
|
- test/aviator/core/session_test.rb
|
363
365
|
- test/aviator/openstack/common/requests/v0/public/base_test.rb
|
@@ -940,6 +942,7 @@ test_files:
|
|
940
942
|
- test/aviator/core/cli/describer_test.rb
|
941
943
|
- test/aviator/core/request_builder_test.rb
|
942
944
|
- test/aviator/core/request_test.rb
|
945
|
+
- test/aviator/core/response_test.rb
|
943
946
|
- test/aviator/core/service_test.rb
|
944
947
|
- test/aviator/core/session_test.rb
|
945
948
|
- test/aviator/openstack/common/requests/v0/public/base_test.rb
|