aviator 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/aviator.gemspec +4 -2
  4. data/bin/aviator +4 -2
  5. data/lib/aviator/core/cli/describer.rb +26 -11
  6. data/lib/aviator/core/service.rb +12 -4
  7. data/lib/aviator/core/session.rb +1 -2
  8. data/lib/aviator/openstack/common/requests/v0/public/base.rb +6 -0
  9. data/lib/aviator/openstack/compute/requests/v2/admin/list_hypervisors.rb +27 -0
  10. data/lib/aviator/openstack/compute/requests/v2/public/add_floating_ip.rb +38 -0
  11. data/lib/aviator/openstack/compute/requests/v2/public/allocate_floating_ip.rb +35 -0
  12. data/lib/aviator/openstack/compute/requests/v2/public/create_keypair.rb +39 -0
  13. data/lib/aviator/openstack/compute/requests/v2/public/create_server.rb +2 -1
  14. data/lib/aviator/openstack/compute/requests/v2/public/list_floating_ips.rb +26 -0
  15. data/lib/aviator/openstack/compute/requests/v2/public/list_keypairs.rb +26 -0
  16. data/lib/aviator/openstack/identity/requests/v2/admin/get_user.rb +33 -0
  17. data/lib/aviator/version.rb +1 -1
  18. data/test/aviator/core/session_test.rb +6 -7
  19. data/test/aviator/openstack/common/requests/v0/public/base_test.rb +13 -0
  20. data/test/aviator/openstack/compute/requests/v2/admin/list_hypervisors_test.rb +112 -0
  21. data/test/aviator/openstack/compute/requests/v2/public/add_floating_ip_test.rb +115 -0
  22. data/test/aviator/openstack/compute/requests/v2/public/allocate_floating_ip_test.rb +107 -0
  23. data/test/aviator/openstack/compute/requests/v2/public/create_keypair_test.rb +135 -0
  24. data/test/aviator/openstack/compute/requests/v2/public/create_server_test.rb +2 -1
  25. data/test/aviator/openstack/compute/requests/v2/public/list_floating_ips_test.rb +101 -0
  26. data/test/aviator/openstack/compute/requests/v2/public/list_keypairs_test.rb +101 -0
  27. data/test/aviator/openstack/identity/requests/v2/admin/get_user_test.rb +116 -0
  28. data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/leads_to_a_valid_response_when_no_parameters_are_provided.yml +103 -0
  29. data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_body_.yml +70 -0
  30. data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_headers_.yml +70 -0
  31. data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_http_method_.yml +70 -0
  32. data/test/cassettes/openstack/compute/requests/v2/admin/list_hypervisors/returns_the_correct_value_for_url_.yml +70 -0
  33. data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/leads_to_a_valid_response_when_valid_params_are_provided.yml +104 -0
  34. data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_body_.yml +71 -0
  35. data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_headers_.yml +71 -0
  36. data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_http_method_.yml +71 -0
  37. data/test/cassettes/openstack/compute/requests/v2/public/add_floating_ip/returns_the_correct_value_for_url_.yml +71 -0
  38. data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/leads_to_a_valid_response_when_valid_params_are_provided.yml +112 -0
  39. data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_body_.yml +78 -0
  40. data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_headers_.yml +78 -0
  41. data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_http_method_.yml +78 -0
  42. data/test/cassettes/openstack/compute/requests/v2/public/allocate_floating_ip/returns_the_correct_value_for_url_.yml +78 -0
  43. data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/leads_to_a_valid_response_when_an_invalid_public_key_is_provided.yml +105 -0
  44. data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/leads_to_a_valid_response_when_valid_parameters_are_provided.yml +107 -0
  45. data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_body_.yml +71 -0
  46. data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_headers_.yml +71 -0
  47. data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_http_method_.yml +71 -0
  48. data/test/cassettes/openstack/compute/requests/v2/public/create_keypair/returns_the_correct_value_for_url_.yml +71 -0
  49. data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/leads_to_a_valid_response_when_no_parameters_are_provided.yml +105 -0
  50. data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_body_.yml +71 -0
  51. data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_headers_.yml +71 -0
  52. data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_http_method_.yml +71 -0
  53. data/test/cassettes/openstack/compute/requests/v2/public/list_floating_ips/returns_the_correct_value_for_url_.yml +71 -0
  54. data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/leads_to_a_valid_response_when_no_parameters_are_provided.yml +105 -0
  55. data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_body_.yml +71 -0
  56. data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_headers_.yml +71 -0
  57. data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_http_method_.yml +71 -0
  58. data/test/cassettes/openstack/compute/requests/v2/public/list_keypairs/returns_the_correct_value_for_url_.yml +71 -0
  59. data/test/cassettes/openstack/identity/requests/v2/admin/get_user/leads_to_a_valid_response_when_name_is_provided.yml +105 -0
  60. data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_body_.yml +70 -0
  61. data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_headers_.yml +70 -0
  62. data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_http_method_.yml +70 -0
  63. data/test/cassettes/openstack/identity/requests/v2/admin/get_user/returns_the_correct_value_for_url_.yml +70 -0
  64. data/test/support/vcr_setup.rb +12 -1
  65. metadata +99 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50c59bcfabe57baf9c0e21fcab0370bc31855e4a
4
- data.tar.gz: 41e8ce7fed1ed7ddee839142d005d66c02a6665f
3
+ metadata.gz: a9501d71ef567ef9bfe2a511a7122a23f8faca48
4
+ data.tar.gz: 9ae86b5df08bbceafb3481b6a4693ab2783996c1
5
5
  SHA512:
6
- metadata.gz: 7fafc12e4cea11cb1e7fff20f13bfdb953614729f74865f1d16e5ca9273abb3c686c79578500232860394169b45283e90a6892abeaff38496e41071231aec36e
7
- data.tar.gz: a9645737bdc80f20516b8b5f499ae15fe8cae7e189268925e207696c55ad0dba1b44125415e74b34316d9f3d0e136b89790533232696792ddd19c0a99bb868e9
6
+ metadata.gz: aed3dc71e256f15c8e314f4d781e369d23b6648fa7406c2e84a34f3326457e5c93fc1c2d2b073a0f71904947081da6191412e346d76ff8a5806184ffed1fd9af
7
+ data.tar.gz: 435d8acd62fcbf0fc8ed08f2ee9fabd6baf87f17b8258eea76f7fae30faaee19b3b36f6e74239bab1914b3603a2f10ca3cf474ca22a19e69c70edde26f0b72d1
data/.gitignore CHANGED
@@ -21,3 +21,5 @@ test/environment.yml
21
21
  vcr.log
22
22
  .ruby-gemset
23
23
  .ruby-version
24
+ *.swp
25
+ *.swo
data/aviator.gemspec CHANGED
@@ -21,10 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency 'faraday', '0.8.8'
25
- spec.add_dependency 'thor', '~> 0.18.1'
24
+ # Runtime dependencies
25
+ spec.add_dependency 'faraday', '>= 0.8.8'
26
+ spec.add_dependency 'thor', '>= 0.18.1'
26
27
  spec.add_dependency 'terminal-table', '>= 1.4.5'
27
28
 
29
+ # Development dependencies. See Gemfile for more development deps.
28
30
  spec.add_development_dependency "bundler", ">= 1.0"
29
31
  spec.add_development_dependency 'rb-fsevent', '~> 0.9.0'
30
32
  spec.add_development_dependency 'guard', '~> 1.8.0'
data/bin/aviator CHANGED
@@ -8,7 +8,7 @@ module Aviator
8
8
  module CLI
9
9
 
10
10
  class Main < Thor
11
-
11
+
12
12
  desc 'describe [PROVIDER] [SERVICE] [API_VERSION ENDPOINT_TYPE REQUEST_NAME]', 'Describes various parts of Aviator.'
13
13
  def describe(provider=nil, service=nil, api_version=nil, endpoint_type=nil, request=nil)
14
14
  if request
@@ -20,6 +20,8 @@ module CLI
20
20
  else
21
21
  puts Aviator::Describer.describe_aviator
22
22
  end
23
+ rescue Aviator::Describer::InvalidProviderNameError => e
24
+ puts e.message
23
25
  end
24
26
 
25
27
  end
@@ -27,4 +29,4 @@ module CLI
27
29
  end
28
30
  end
29
31
 
30
- Aviator::CLI::Main.start(ARGV)
32
+ Aviator::CLI::Main.start(ARGV)
@@ -2,6 +2,13 @@ module Aviator
2
2
 
3
3
  class Describer
4
4
 
5
+ class InvalidProviderNameError < StandardError
6
+ def initialize(name)
7
+ super "Provider '#{ name }' does not exist."
8
+ end
9
+ end
10
+
11
+
5
12
  def self.describe_aviator
6
13
  str = "Available providers:\n"
7
14
 
@@ -104,13 +111,19 @@ module Aviator
104
111
 
105
112
 
106
113
  def self.describe_service(provider_name, service_name)
107
- str = "Available requests for #{ provider_name } #{ service_name }_service:\n"
114
+ requests = request_classes(provider_name, service_name)
108
115
 
109
- request_classes(provider_name, service_name).each do |klass|
110
- str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n"
111
- end
116
+ if requests.empty?
117
+ str = "No requests found for #{ provider_name } #{ service_name }_service."
118
+ else
119
+ str = "Available requests for #{ provider_name } #{ service_name }_service:\n"
112
120
 
113
- str
121
+ requests.each do |klass|
122
+ str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n"
123
+ end
124
+
125
+ str
126
+ end
114
127
  end
115
128
 
116
129
 
@@ -132,12 +145,14 @@ module Aviator
132
145
  end
133
146
 
134
147
 
135
- def service_names(provider_name)
136
- Pathname.new(__FILE__) \
137
- .join('..', '..', '..', provider_name) \
138
- .children \
139
- .select{|c| c.directory? } \
140
- .map{|c| c.basename.to_s }
148
+ def service_names(name)
149
+ provider = Pathname.new(__FILE__).join('..', '..', '..', name)
150
+
151
+ raise InvalidProviderNameError.new(name) unless provider.exist?
152
+
153
+ provider.children \
154
+ .select{|c| c.directory? } \
155
+ .map{|c| c.basename.to_s }
141
156
  end
142
157
  end
143
158
 
@@ -21,9 +21,17 @@ module Aviator
21
21
  end
22
22
 
23
23
  class SessionDataNotProvidedError < StandardError
24
- def initialize
25
- super "default_session_data is not initialized and no session data was "\
26
- "provided in the method call."
24
+ def initialize(service_name, request_name)
25
+ super "\n\nERROR: default_session_data is not initialized and no session data was provided in\n"\
26
+ "the method call. You have two ways to fix this:\n\n"\
27
+ " 1) Call Session#authenticate before calling Session##{service_name}_service, or\n\n"\
28
+ " 2) If you're really sure you don't want to authenticate beforehand,\n"\
29
+ " construct the method call this way:\n\n"\
30
+ " service = session.#{service_name}_service\n"\
31
+ " service.request :#{request_name}, :api_version => :v2, :session_data => sessiondatavar\n\n"\
32
+ " Replace :v2 with whatever available version you want to use and make sure sessiondatavar\n"\
33
+ " is a hash that contains, at least, the :base_url key. Other keys, such as :service_token may\n"\
34
+ " be needed depending on what the request class you are calling requires.\n\n"
27
35
  end
28
36
  end
29
37
 
@@ -75,7 +83,7 @@ module Aviator
75
83
 
76
84
  session_data = options[:session_data] || default_session_data
77
85
 
78
- raise SessionDataNotProvidedError.new unless session_data
86
+ raise SessionDataNotProvidedError.new(@service, request_name) unless session_data
79
87
 
80
88
  [:base_url].each do |k|
81
89
  session_data[k] = options[k] if options[k]
@@ -76,6 +76,7 @@ module Aviator
76
76
  else
77
77
  raise AuthenticationError.new(response.body)
78
78
  end
79
+ self
79
80
  end
80
81
 
81
82
 
@@ -152,8 +153,6 @@ module Aviator
152
153
 
153
154
 
154
155
  def get_service_obj(service_name)
155
- raise NotAuthenticatedError.new unless self.authenticated?
156
-
157
156
  @services ||= {}
158
157
 
159
158
  if @services[service_name].nil?
@@ -12,6 +12,12 @@ module Aviator
12
12
  if self.anonymous?
13
13
  # do nothing
14
14
 
15
+ elsif session_data.has_key? :service_token
16
+ # service_token is the token that one would bootstrap OpenStack
17
+ # with during the installation process. This token can be used
18
+ # directly and does not require authentication beforehand.
19
+ h['X-Auth-Token'] = session_data[:service_token]
20
+
15
21
  elsif keystone_v2_style_session_data?
16
22
  h['X-Auth-Token'] = session_data[:body][:access][:token][:id]
17
23
 
@@ -0,0 +1,27 @@
1
+ module Aviator
2
+
3
+ define_request :list_hypervisors, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
+
5
+ meta :service, :compute
6
+
7
+ link 'documentation',
8
+ 'http://api.openstack.org/api-ref-compute-v2-ext.html#ext-os-hypervisors'
9
+
10
+ def headers
11
+ super
12
+ end
13
+
14
+
15
+ def http_method
16
+ :get
17
+ end
18
+
19
+
20
+ def url
21
+ "#{ base_url }/os-hypervisors"
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
@@ -0,0 +1,38 @@
1
+ module Aviator
2
+
3
+ define_request :add_floating_ip, :inherit => [:openstack, :common, :v2, :public, :base] do
4
+
5
+ meta :service, :compute
6
+
7
+ link 'documentation',
8
+ 'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-floating-ips-v2_AddFloatingIP__v2__tenant_id__servers__server_id__action_ext-os-floating-ips.html#POST_os-floating-ips-v2_AddFloatingIP__v2__tenant_id__servers__server_id__action_ext-os-floating-ips-Request'
9
+
10
+ param :server_id, :required => true
11
+ param :address, :required => true
12
+
13
+ def body
14
+ {
15
+ :addFloatingIp => {
16
+ :address => params[:address]
17
+ }
18
+ }
19
+ end
20
+
21
+
22
+ def headers
23
+ super
24
+ end
25
+
26
+
27
+ def http_method
28
+ :post
29
+ end
30
+
31
+
32
+ def url
33
+ "#{ base_url }/servers/#{ params[:server_id] }/action"
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,35 @@
1
+ module Aviator
2
+
3
+ define_request :allocate_floating_ip, :inherit => [:openstack, :common, :v2, :public, :base] do
4
+
5
+ meta :service, :compute
6
+
7
+ link 'documentation',
8
+ 'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-floating-ips-v2_AllocateFloatingIP__v2__tenant_id__os-floating-ips_ext-os-floating-ips.html'
9
+
10
+ param :pool, :required => false
11
+
12
+ def body
13
+ {
14
+ :pool => params[:pool]
15
+ }
16
+ end
17
+
18
+
19
+ def headers
20
+ super
21
+ end
22
+
23
+
24
+ def http_method
25
+ :post
26
+ end
27
+
28
+
29
+ def url
30
+ "#{ base_url }/os-floating-ips"
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,39 @@
1
+ module Aviator
2
+
3
+ define_request :create_keypair, :inherit => [:openstack, :common, :v2, :public, :base] do
4
+
5
+ meta :service, :compute
6
+
7
+ link 'documentation',
8
+ 'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-keypairs-v2_createKeypair__v2__tenant_id__os-keypairs_ext-os-keypairs.html'
9
+
10
+ param :name, :required => true
11
+ param :public_key, :required => false
12
+
13
+ def body
14
+ {
15
+ :keypair => {
16
+ :name => params[:name],
17
+ :public_key => params[:public_key],
18
+ }
19
+ }
20
+ end
21
+
22
+
23
+ def headers
24
+ super
25
+ end
26
+
27
+
28
+ def http_method
29
+ :post
30
+ end
31
+
32
+
33
+ def url
34
+ "#{ base_url }/os-keypairs"
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -12,6 +12,7 @@ module Aviator
12
12
  param :adminPass, :required => false, :alias => :admin_pass
13
13
  param :imageRef, :required => true, :alias => :image_ref
14
14
  param :flavorRef, :required => true, :alias => :flavor_ref
15
+ param :key_name, :required => false
15
16
  param :metadata, :required => false
16
17
  param :name, :required => true
17
18
  param :networks, :required => false
@@ -27,7 +28,7 @@ module Aviator
27
28
  }
28
29
  }
29
30
 
30
- [:adminPass, :metadata, :personality, :networks, :accessIPv4, :accessIPv6].each do |key|
31
+ [:adminPass, :metadata, :personality, :networks, :accessIPv4, :accessIPv6, :key_name].each do |key|
31
32
  p[:server][key] = params[key] if params[key]
32
33
  end
33
34
 
@@ -0,0 +1,26 @@
1
+ module Aviator
2
+
3
+ define_request :list_floating_ips, :inherit => [:openstack, :common, :v2, :public, :base] do
4
+
5
+ meta :service, :compute
6
+
7
+ link 'documentation',
8
+ 'http://docs.openstack.org/api/openstack-compute/2/content/GET_os-floating-ips-v2_ListFloatingIPs__v2__tenant_id__os-floating-ips_ext-os-floating-ips.html'
9
+
10
+ def headers
11
+ super
12
+ end
13
+
14
+
15
+ def http_method
16
+ :get
17
+ end
18
+
19
+
20
+ def url
21
+ str = "#{ base_url }/os-floating-ips"
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,26 @@
1
+ module Aviator
2
+
3
+ define_request :list_keypairs, :inherit => [:openstack, :common, :v2, :public, :base] do
4
+
5
+ meta :service, :compute
6
+
7
+ link 'documentation',
8
+ 'http://docs.openstack.org/api/openstack-compute/2/content/GET_os-keypairs-v2_getKeypair__v2__tenant_id__os-keypairs_ext-os-keypairs.html'
9
+
10
+ def headers
11
+ super
12
+ end
13
+
14
+
15
+ def http_method
16
+ :get
17
+ end
18
+
19
+
20
+ def url
21
+ str = "#{ base_url }/os-keypairs"
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,33 @@
1
+ require 'cgi'
2
+
3
+ module Aviator
4
+
5
+ define_request :get_user, :inherit => [:openstack, :common, :v2, :public, :base] do
6
+
7
+ meta :provider, :openstack
8
+ meta :service, :identity
9
+ meta :api_version, :v2
10
+ meta :endpoint_type, :admin
11
+
12
+ link 'documentation',
13
+ 'http://docs.openstack.org/api/openstack-identity-service/2.0/content/GET_getUserByName_v2.0_users__User_Operations.html'
14
+
15
+ param :name, :required => true
16
+
17
+ def headers
18
+ super
19
+ end
20
+
21
+
22
+ def http_method
23
+ :get
24
+ end
25
+
26
+
27
+ def url
28
+ "#{ base_url }/users?name=#{ CGI::escape(params.name) }"
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -1,3 +1,3 @@
1
1
  module Aviator
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -261,13 +261,6 @@ class Aviator::Test
261
261
 
262
262
  describe '#xxx_service' do
263
263
 
264
- it 'raises a NotAuthenticatedError if called without authenticating first' do
265
- the_method = lambda { new_session.identity_service }
266
-
267
- the_method.must_raise Aviator::Session::NotAuthenticatedError
268
- end
269
-
270
-
271
264
  it 'returns an instance of the indicated service' do
272
265
  session = new_session
273
266
  session.authenticate
@@ -275,6 +268,12 @@ class Aviator::Test
275
268
  session.identity_service.wont_be_nil
276
269
  end
277
270
 
271
+ it 'returns an instance of the indicated service even if not authenticated' do
272
+ session = new_session
273
+ session.compute_service.wont_be_nil
274
+ session.authenticated?.must_equal false
275
+ end
276
+
278
277
  end
279
278
 
280
279
  end # describe 'aviator/core/service'
@@ -66,6 +66,19 @@ class Aviator::Test
66
66
 
67
67
  describe '#headers' do
68
68
 
69
+ it 'must know to extract a service token if provided' do
70
+ session_data = {
71
+ :base_url => 'http://example.com',
72
+ :service_token => 'sometokenipickedupfromsomewhere'
73
+ }
74
+ headers = { 'X-Auth-Token' => session_data[:service_token] }
75
+
76
+ request = create_request(session_data)
77
+
78
+ request.headers.must_equal headers
79
+ end
80
+
81
+
69
82
  it 'must know to extract token from a Keystone v2 auth info' do
70
83
  session_data = get_session_data(:v2)
71
84
  headers = { 'X-Auth-Token' => session_data[:body][:access][:token][:id] }
@@ -0,0 +1,112 @@
1
+ require 'test_helper'
2
+
3
+ class Aviator::Test
4
+
5
+ describe 'aviator/openstack/compute/requests/v2/admin/list_hypervisors' do
6
+
7
+ def create_request(session_data = get_session_data, &block)
8
+ klass.new(session_data, &block)
9
+ end
10
+
11
+
12
+ def get_session_data
13
+ session.send :auth_response
14
+ end
15
+
16
+
17
+ def helper
18
+ Aviator::Test::RequestHelper
19
+ end
20
+
21
+
22
+ def klass
23
+ @klass ||= helper.load_request('openstack', 'compute', 'v2', 'admin', 'list_hypervisors.rb')
24
+ end
25
+
26
+
27
+ def session
28
+ unless @session
29
+ @session = Aviator::Session.new(
30
+ :config_file => Environment.path,
31
+ :environment => 'openstack_admin'
32
+ )
33
+ @session.authenticate
34
+ end
35
+
36
+ @session
37
+ end
38
+
39
+
40
+ validate_attr :anonymous? do
41
+ klass.anonymous?.must_equal false
42
+ end
43
+
44
+
45
+ validate_attr :api_version do
46
+ klass.api_version.must_equal :v2
47
+ end
48
+
49
+
50
+ validate_attr :body do
51
+ klass.body?.must_equal false
52
+ create_request.body?.must_equal false
53
+ end
54
+
55
+
56
+ validate_attr :endpoint_type do
57
+ klass.endpoint_type.must_equal :admin
58
+ end
59
+
60
+
61
+ validate_attr :headers do
62
+ session_data = get_session_data
63
+
64
+ headers = { 'X-Auth-Token' => session_data[:body][:access][:token][:id] }
65
+
66
+ request = create_request(session_data)
67
+
68
+ request.headers.must_equal headers
69
+ end
70
+
71
+
72
+ validate_attr :http_method do
73
+ create_request.http_method.must_equal :get
74
+ end
75
+
76
+
77
+ validate_attr :optional_params do
78
+ klass.optional_params.must_equal []
79
+ end
80
+
81
+
82
+ validate_attr :required_params do
83
+ klass.required_params.must_equal []
84
+ end
85
+
86
+
87
+ validate_attr :url do
88
+ session_data = get_session_data
89
+ service_spec = session_data[:body][:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
90
+ url = "#{ service_spec[:endpoints][0][:adminURL] }/os-hypervisors"
91
+ request = klass.new(session_data)
92
+
93
+ request.url.must_equal url
94
+ end
95
+
96
+
97
+ validate_response 'no parameters are provided' do
98
+ service = session.compute_service
99
+
100
+ response = service.request :list_hypervisors, :api_version => :v2
101
+
102
+ response.status.must_equal 200
103
+ response.body.wont_be_nil
104
+ response.body[:hypervisors].must_be_kind_of Array
105
+ response.body[:hypervisors].length.wont_equal 0
106
+ response.headers.wont_be_nil
107
+ end
108
+
109
+ end
110
+
111
+ end
112
+