aviator 0.0.8 → 0.0.9

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.
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
+