rackspace-cloud 0.5
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.
- data/History.txt +4 -0
- data/Manifest.txt +22 -0
- data/PostInstall.txt +4 -0
- data/README.rdoc +72 -0
- data/Rakefile +17 -0
- data/lib/rackspace-cloud.rb +1 -0
- data/lib/rackspace.rb +21 -0
- data/lib/rackspace/cloud_servers/base.rb +133 -0
- data/lib/rackspace/cloud_servers/flavor.rb +13 -0
- data/lib/rackspace/cloud_servers/image.rb +8 -0
- data/lib/rackspace/cloud_servers/server.rb +8 -0
- data/lib/rackspace/connection.rb +115 -0
- data/lib/rackspace/exceptions.rb +7 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/test/test_base.rb +149 -0
- data/test/test_connection.rb +219 -0
- data/test/test_flavor.rb +138 -0
- data/test/test_helper.rb +64 -0
- data/test/test_image.rb +177 -0
- data/test/test_server.rb +259 -0
- metadata +114 -0
data/script/console
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# File: script/console
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
+
|
5
|
+
libs = " -r irb/completion"
|
6
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
7
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/rackspace-cloud.rb'}"
|
9
|
+
puts "Loading rackspace-cloud gem"
|
10
|
+
exec "#{irb} #{libs} --simple-prompt"
|
data/script/destroy
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/destroy'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/generate'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
data/test/test_base.rb
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
class Rackspace::CloudServers::BaseTest < ActiveSupport::TestCase
|
4
|
+
context "querying a resource with Rackspace" do
|
5
|
+
should "return the right resource name" do
|
6
|
+
mock_auth_response
|
7
|
+
assert_equal "bases", Rackspace::CloudServers::Base.resource
|
8
|
+
end
|
9
|
+
|
10
|
+
should "build the right resource URL for the index" do
|
11
|
+
mock_auth_response
|
12
|
+
assert_equal "http://test/servers/bases", Rackspace::CloudServers::Base.resource_url
|
13
|
+
end
|
14
|
+
|
15
|
+
should "build the right resource URL for the retrieval" do
|
16
|
+
mock_auth_response
|
17
|
+
assert_equal "http://test/servers/bases/1", Rackspace::CloudServers::Base.resource_url(1)
|
18
|
+
end
|
19
|
+
|
20
|
+
should "make the right request for find(:all)" do
|
21
|
+
mock_auth_response
|
22
|
+
expects_get("http://test/servers/bases/detail.json")
|
23
|
+
Rackspace::CloudServers::Base.find(:all)
|
24
|
+
end
|
25
|
+
|
26
|
+
should "make the right request for find(:first)" do
|
27
|
+
mock_auth_response
|
28
|
+
expects_get("http://test/servers/bases/detail.json")
|
29
|
+
Rackspace::CloudServers::Base.find(:first)
|
30
|
+
end
|
31
|
+
|
32
|
+
should "make the right request for find(:last)" do
|
33
|
+
mock_auth_response
|
34
|
+
expects_get("http://test/servers/bases/detail.json")
|
35
|
+
Rackspace::CloudServers::Base.find(:last)
|
36
|
+
end
|
37
|
+
|
38
|
+
should "make the right request for all and default to find(:all)" do
|
39
|
+
mock_auth_response
|
40
|
+
expects_get("http://test/servers/bases/detail.json")
|
41
|
+
Rackspace::CloudServers::Base.all
|
42
|
+
end
|
43
|
+
|
44
|
+
should "make the right request for count" do
|
45
|
+
mock_auth_response
|
46
|
+
expects_get("http://test/servers/bases/detail.json")
|
47
|
+
assert_equal 0, Rackspace::CloudServers::Base.count
|
48
|
+
end
|
49
|
+
|
50
|
+
should "make the right request for first and default to find(:first)" do
|
51
|
+
mock_auth_response
|
52
|
+
expects_get("http://test/servers/bases/detail.json")
|
53
|
+
Rackspace::CloudServers::Base.first
|
54
|
+
end
|
55
|
+
|
56
|
+
should "make the right request for last and default to find(:last)" do
|
57
|
+
mock_auth_response
|
58
|
+
expects_get("http://test/servers/bases/detail.json")
|
59
|
+
Rackspace::CloudServers::Base.last
|
60
|
+
end
|
61
|
+
|
62
|
+
should "make the right request for find and default to find(:all)" do
|
63
|
+
mock_auth_response
|
64
|
+
expects_get("http://test/servers/bases/detail.json")
|
65
|
+
Rackspace::CloudServers::Base.find
|
66
|
+
end
|
67
|
+
|
68
|
+
should "make the right request for find(1)" do
|
69
|
+
mock_auth_response
|
70
|
+
expects_get("http://test/servers/bases/1.json")
|
71
|
+
Rackspace::CloudServers::Base.find(1)
|
72
|
+
end
|
73
|
+
|
74
|
+
should "return the right data for find(:all)" do
|
75
|
+
mock_auth_response
|
76
|
+
expects_get("http://test/servers/bases/detail.json").returns({"bases" => [{"id" => 1}, {"id" => 2}]}.to_json)
|
77
|
+
result = Rackspace::CloudServers::Base.find(:all)
|
78
|
+
assert_equal 2, result.length
|
79
|
+
assert_equal Rackspace::CloudServers::Base, result.first.class
|
80
|
+
assert_equal 1, result.first.id
|
81
|
+
assert_equal false, result.first.new_record?
|
82
|
+
assert_equal Rackspace::CloudServers::Base, result.last.class
|
83
|
+
assert_equal 2, result.last.id
|
84
|
+
assert_equal false, result.last.new_record?
|
85
|
+
end
|
86
|
+
|
87
|
+
should "return the right data for find(1)" do
|
88
|
+
mock_auth_response
|
89
|
+
expects_get("http://test/servers/bases/1.json").returns({"base" => {"id" => 1}}.to_json)
|
90
|
+
result = Rackspace::CloudServers::Base.find(1)
|
91
|
+
assert_equal Rackspace::CloudServers::Base, result.class
|
92
|
+
assert_equal 1, result.id
|
93
|
+
assert_equal false, result.new_record?
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "creating a resource with Rackspace" do
|
98
|
+
should "be a new record" do
|
99
|
+
base = Rackspace::CloudServers::Base.new
|
100
|
+
assert_equal true, base.new_record?
|
101
|
+
end
|
102
|
+
|
103
|
+
should "make the right POST request" do
|
104
|
+
mock_auth_response
|
105
|
+
expects_post("http://test/servers/bases.json", {"base" => {}}).returns({"base" => {"id" => 1}}.to_json)
|
106
|
+
base = Rackspace::CloudServers::Base.new
|
107
|
+
assert_equal true, base.save
|
108
|
+
assert_equal 1, base.id
|
109
|
+
end
|
110
|
+
|
111
|
+
should "make the right POST request on a direct create call too" do
|
112
|
+
mock_auth_response
|
113
|
+
expects_post("http://test/servers/bases.json", {"base" => {}}).returns({"base" => {"id" => 1}}.to_json)
|
114
|
+
base = Rackspace::CloudServers::Base.create
|
115
|
+
assert_equal 1, base.id
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "updating a resource with Rackspace" do
|
120
|
+
should "make the right PUT request" do
|
121
|
+
mock_auth_response
|
122
|
+
expects_put("http://test/servers/bases/1.json", {"base" => {}})
|
123
|
+
assert_equal true, Rackspace::CloudServers::Base.new(:id => 1).save
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "deleting a resource with Rackspace" do
|
128
|
+
should "make the right DELETE request" do
|
129
|
+
mock_auth_response
|
130
|
+
expects_delete("http://test/servers/bases/1.json")
|
131
|
+
assert_equal true, Rackspace::CloudServers::Base.new(:id => 1).destroy
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "reloading a resource with Rackspace" do
|
136
|
+
should "not be allowed when it's a new record" do
|
137
|
+
assert_equal false, Rackspace::CloudServers::Base.new.reload
|
138
|
+
end
|
139
|
+
|
140
|
+
should "make the GET request for the server" do
|
141
|
+
mock_auth_response
|
142
|
+
expects_get("http://test/servers/bases/1.json").returns({"base" => {"id" => 2}}.to_json)
|
143
|
+
result = Rackspace::CloudServers::Base.new(:id => 1)
|
144
|
+
updated = result.reload
|
145
|
+
assert_equal 2, updated.id
|
146
|
+
assert_equal 2, result.id
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,219 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
class Rackspace::ConnectionTest < ActiveSupport::TestCase
|
4
|
+
context "working with Rackspace::Connection" do
|
5
|
+
should "have JSON as the default accept type" do
|
6
|
+
assert_equal "application/json", Rackspace::Connection.default_headers[:accept]
|
7
|
+
end
|
8
|
+
|
9
|
+
should "have JSON as the default content type" do
|
10
|
+
assert_equal "application/json", Rackspace::Connection.default_headers[:content_type]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "querying for API versions" do
|
15
|
+
setup do
|
16
|
+
expects_versions_response
|
17
|
+
end
|
18
|
+
|
19
|
+
should "receive the right arguments for the HTTP request" do
|
20
|
+
Rackspace::Connection.versions
|
21
|
+
end
|
22
|
+
|
23
|
+
should "return the right data" do
|
24
|
+
versions = Rackspace::Connection.versions
|
25
|
+
assert_equal 2, versions.length
|
26
|
+
assert_equal true, versions.include?("v1.1")
|
27
|
+
assert_equal true, versions.include?("v1.0")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "initializing Rackspace::Connection with default version" do
|
32
|
+
setup do
|
33
|
+
expects_versions_response
|
34
|
+
Rackspace::Connection.init "test_user", "test_key"
|
35
|
+
end
|
36
|
+
|
37
|
+
should "have set API user" do
|
38
|
+
assert_equal "test_user", Rackspace::Connection.api_user
|
39
|
+
end
|
40
|
+
|
41
|
+
should "have set API key" do
|
42
|
+
assert_equal "test_key", Rackspace::Connection.api_key
|
43
|
+
end
|
44
|
+
|
45
|
+
should "have set API version" do
|
46
|
+
assert_equal "v1.0", Rackspace::Connection.api_version
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "initializing Rackspace::Connection with specific version" do
|
51
|
+
setup do
|
52
|
+
expects_versions_response
|
53
|
+
Rackspace::Connection.init "test_user", "test_key", "v1.1"
|
54
|
+
end
|
55
|
+
|
56
|
+
should "have set API user" do
|
57
|
+
assert_equal "test_user", Rackspace::Connection.api_user
|
58
|
+
end
|
59
|
+
|
60
|
+
should "have set API key" do
|
61
|
+
assert_equal "test_key", Rackspace::Connection.api_key
|
62
|
+
end
|
63
|
+
|
64
|
+
should "have set API version" do
|
65
|
+
assert_equal "v1.1", Rackspace::Connection.api_version
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "initializing Rackspace::Connection with invalid version" do
|
70
|
+
setup do
|
71
|
+
expects_versions_response
|
72
|
+
end
|
73
|
+
|
74
|
+
should "raise an exception" do
|
75
|
+
assert_raise Rackspace::InvalidVersion do
|
76
|
+
Rackspace::Connection.init "test_user", "test_key", "v1.2"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "before authenticating with Rackspace a call to authentication info" do
|
82
|
+
should "trigger an authentication first time ONLY (auth_response)" do
|
83
|
+
Rackspace::Connection.instance_variable_set("@auth_response", nil)
|
84
|
+
mock_api_init
|
85
|
+
expects_authentication
|
86
|
+
Rackspace::Connection.auth_response
|
87
|
+
Rackspace::Connection.auth_response
|
88
|
+
end
|
89
|
+
|
90
|
+
should "call auth_response to find the right value (auth_token)" do
|
91
|
+
response = mock
|
92
|
+
response.expects(:[]).with(:auth_token).returns("123456789")
|
93
|
+
Rackspace::Connection.expects(:auth_response).returns(response)
|
94
|
+
token = Rackspace::Connection.auth_token
|
95
|
+
assert_equal "123456789", token
|
96
|
+
end
|
97
|
+
|
98
|
+
should "call auth_response to find the right value (storage_url)" do
|
99
|
+
response = mock
|
100
|
+
response.expects(:[]).with(:storage_url).returns("http://test/storage")
|
101
|
+
Rackspace::Connection.expects(:auth_response).returns(response)
|
102
|
+
url = Rackspace::Connection.storage_url
|
103
|
+
assert_equal "http://test/storage", url
|
104
|
+
end
|
105
|
+
|
106
|
+
should "call auth_response to find the right value (server_management_url)" do
|
107
|
+
response = mock
|
108
|
+
response.expects(:[]).with(:server_management_url).returns("http://test/servers")
|
109
|
+
Rackspace::Connection.expects(:auth_response).returns(response)
|
110
|
+
url = Rackspace::Connection.server_management_url
|
111
|
+
assert_equal "http://test/servers", url
|
112
|
+
end
|
113
|
+
|
114
|
+
should "call auth_response to find the right value (cdn_management_url)" do
|
115
|
+
response = mock
|
116
|
+
response.expects(:[]).with(:cdn_management_url).returns("http://test/content")
|
117
|
+
Rackspace::Connection.expects(:auth_response).returns(response)
|
118
|
+
url = Rackspace::Connection.cdn_management_url
|
119
|
+
assert_equal "http://test/content", url
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
context "authenticating with Rackspace" do
|
124
|
+
setup do
|
125
|
+
mock_api_init
|
126
|
+
expects_authentication
|
127
|
+
end
|
128
|
+
|
129
|
+
should "receive the right arguments for the HTTP request" do
|
130
|
+
Rackspace::Connection.authenticate
|
131
|
+
end
|
132
|
+
|
133
|
+
should "return the important authentication details" do
|
134
|
+
response = Rackspace::Connection.authenticate
|
135
|
+
assert_equal Hash, response.class
|
136
|
+
assert_equal 4, response.keys.length
|
137
|
+
assert_equal "123456789", response[:auth_token]
|
138
|
+
assert_equal "http://test/storage", response[:storage_url]
|
139
|
+
assert_equal "http://test/servers", response[:server_management_url]
|
140
|
+
assert_equal "http://test/content", response[:cdn_management_url]
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "authenticating with Rackspace without initializing" do
|
145
|
+
setup do
|
146
|
+
Rackspace::Connection.send(:instance_variable_set, "@initialized", false)
|
147
|
+
end
|
148
|
+
|
149
|
+
should "raise an exception" do
|
150
|
+
assert_raise Rackspace::NotInitialized do
|
151
|
+
Rackspace::Connection.authenticate
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context "making GET requests to Rackspace" do
|
157
|
+
should "build the right GET request" do
|
158
|
+
mock_auth_response "123456789"
|
159
|
+
expects_get("http://test/url.json", {"X-TestHeader" => "testing"})
|
160
|
+
Rackspace::Connection.get "http://test/url", {"X-TestHeader" => "testing"}
|
161
|
+
end
|
162
|
+
|
163
|
+
should "re-authenticate if it receives a 401 Unauthorized back" do
|
164
|
+
mock_auth_response "123456789"
|
165
|
+
expects_get("http://test/url.json").raises(RestClient::Unauthorized, "RestClient::Unauthorized")
|
166
|
+
expects_authentication "234567891"
|
167
|
+
expects_get("http://test/url.json", {"X-Auth-Token" => "234567891"})
|
168
|
+
Rackspace::Connection.get "http://test/url"
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context "making POST requests to Rackspace" do
|
173
|
+
should "build the right POST request" do
|
174
|
+
mock_auth_response "123456789"
|
175
|
+
expects_post("http://test/url.json", {:data1 => "test", :data2 => "test"}, {"X-TestHeader" => "testing"})
|
176
|
+
Rackspace::Connection.post "http://test/url", {:data1 => "test", :data2 => "test"}, {"X-TestHeader" => "testing"}
|
177
|
+
end
|
178
|
+
|
179
|
+
should "re-authenticate if it receives a 401 Unauthorized back" do
|
180
|
+
mock_auth_response "123456789"
|
181
|
+
expects_post("http://test/url.json", {:data1 => "test", :data2 => "test"}).raises(RestClient::Unauthorized, "RestClient::Unauthorized")
|
182
|
+
expects_authentication "234567891"
|
183
|
+
expects_post("http://test/url.json", {:data1 => "test", :data2 => "test"}, {"X-Auth-Token" => "234567891"})
|
184
|
+
Rackspace::Connection.post "http://test/url", {:data1 => "test", :data2 => "test"}
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
context "making PUT requests to Rackspace" do
|
189
|
+
should "build the right PUT request" do
|
190
|
+
mock_auth_response "123456789"
|
191
|
+
expects_put("http://test/url.json", {:data1 => "test", :data2 => "test"}, {"X-TestHeader" => "testing"})
|
192
|
+
Rackspace::Connection.put "http://test/url", {:data1 => "test", :data2 => "test"}, {"X-TestHeader" => "testing"}
|
193
|
+
end
|
194
|
+
|
195
|
+
should "re-authenticate if it receives a 401 Unauthorized back" do
|
196
|
+
mock_auth_response "123456789"
|
197
|
+
expects_put("http://test/url.json", {:data1 => "test", :data2 => "test"}).raises(RestClient::Unauthorized, "RestClient::Unauthorized")
|
198
|
+
expects_authentication "234567891"
|
199
|
+
expects_put("http://test/url.json", {:data1 => "test", :data2 => "test"}, {"X-Auth-Token" => "234567891"})
|
200
|
+
Rackspace::Connection.put "http://test/url", {:data1 => "test", :data2 => "test"}
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
context "making DELETE requests to Rackspace" do
|
205
|
+
should "build the right DELETE request" do
|
206
|
+
mock_auth_response "123456789"
|
207
|
+
expects_delete("http://test/url.json", {"X-TestHeader" => "testing"})
|
208
|
+
Rackspace::Connection.delete "http://test/url", {"X-TestHeader" => "testing"}
|
209
|
+
end
|
210
|
+
|
211
|
+
should "re-authenticate if it receives a 401 Unauthorized back" do
|
212
|
+
mock_auth_response "123456789"
|
213
|
+
expects_delete("http://test/url.json").raises(RestClient::Unauthorized, "RestClient::Unauthorized")
|
214
|
+
expects_authentication "234567891"
|
215
|
+
expects_delete("http://test/url.json", {"X-Auth-Token" => "234567891"})
|
216
|
+
Rackspace::Connection.delete "http://test/url"
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
data/test/test_flavor.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
class Rackspace::CloudServers::FlavorTest < ActiveSupport::TestCase
|
4
|
+
context "working with Rackspace::CloudServers::Flavor" do
|
5
|
+
should "inherit from Rackspace::CloudServers::Base" do
|
6
|
+
assert Rackspace::CloudServers::Flavor.ancestors.include?(Rackspace::CloudServers::Base)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
context "an instance of Rackspace::CloudServers::Flavor" do
|
11
|
+
setup do
|
12
|
+
@flavor = Rackspace::CloudServers::Flavor.new
|
13
|
+
end
|
14
|
+
|
15
|
+
[:id, :name, :ram, :disk].each do |attrib|
|
16
|
+
should "respond to #{attrib}" do
|
17
|
+
assert @flavor.respond_to?(attrib)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "querying flavors" do
|
23
|
+
should "build the right resource URL for the index" do
|
24
|
+
mock_auth_response
|
25
|
+
assert_equal "http://test/servers/flavors", Rackspace::CloudServers::Flavor.resource_url
|
26
|
+
end
|
27
|
+
|
28
|
+
should "build the right resource URL for the retrieval" do
|
29
|
+
mock_auth_response
|
30
|
+
assert_equal "http://test/servers/flavors/1", Rackspace::CloudServers::Flavor.resource_url(1)
|
31
|
+
end
|
32
|
+
|
33
|
+
should "make the right request for find(:all)" do
|
34
|
+
mock_auth_response
|
35
|
+
expects_get("http://test/servers/flavors/detail.json")
|
36
|
+
Rackspace::CloudServers::Flavor.find(:all)
|
37
|
+
end
|
38
|
+
|
39
|
+
should "make the right request for find and default to find(:all)" do
|
40
|
+
mock_auth_response
|
41
|
+
expects_get("http://test/servers/flavors/detail.json")
|
42
|
+
Rackspace::CloudServers::Flavor.find
|
43
|
+
end
|
44
|
+
|
45
|
+
should "make the right request for find(1)" do
|
46
|
+
mock_auth_response
|
47
|
+
expects_get("http://test/servers/flavors/1.json")
|
48
|
+
Rackspace::CloudServers::Flavor.find(1)
|
49
|
+
end
|
50
|
+
|
51
|
+
should "return the right data for find(:all)" do
|
52
|
+
mock_auth_response
|
53
|
+
expects_get("http://test/servers/flavors/detail.json").returns(find_all_response)
|
54
|
+
result = Rackspace::CloudServers::Flavor.find(:all)
|
55
|
+
assert_equal 2, result.length
|
56
|
+
assert_equal Rackspace::CloudServers::Flavor, result.first.class
|
57
|
+
assert_equal 1, result.first.id
|
58
|
+
assert_equal Rackspace::CloudServers::Flavor, result.last.class
|
59
|
+
assert_equal 2, result.last.id
|
60
|
+
end
|
61
|
+
|
62
|
+
should "return the right data for find(1)" do
|
63
|
+
mock_auth_response
|
64
|
+
expects_get("http://test/servers/flavors/1.json").returns(find_1_response)
|
65
|
+
result = Rackspace::CloudServers::Flavor.find(1)
|
66
|
+
assert_equal Rackspace::CloudServers::Flavor, result.class
|
67
|
+
assert_equal 1, result.id
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "creating a flavor" do
|
72
|
+
should "return false as it's read-only" do
|
73
|
+
assert_equal false, Rackspace::CloudServers::Flavor.new(:name => "test").save
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "deleting a flavor" do
|
78
|
+
should "return false as it's read-only" do
|
79
|
+
assert_equal false, Rackspace::CloudServers::Flavor.new(:id => 1).destroy
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "reloading a flavor instance" do
|
84
|
+
should "not be allowed when it's a new record" do
|
85
|
+
assert_equal false, Rackspace::CloudServers::Flavor.new.reload
|
86
|
+
end
|
87
|
+
|
88
|
+
should "make the GET request for the flavor" do
|
89
|
+
mock_auth_response
|
90
|
+
expects_get("http://test/servers/flavors/1.json").returns(find_1_response_reloaded)
|
91
|
+
result = Rackspace::CloudServers::Flavor.new(:id => 1)
|
92
|
+
updated = result.reload
|
93
|
+
assert_equal 100, updated.disk
|
94
|
+
assert_equal 100, result.disk
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def find_all_response
|
99
|
+
{
|
100
|
+
"flavors" => [
|
101
|
+
{
|
102
|
+
"id" => 1,
|
103
|
+
"name" => "256 MB Server",
|
104
|
+
"ram" => 256,
|
105
|
+
"disk" => 10
|
106
|
+
},
|
107
|
+
{
|
108
|
+
"id" => 2,
|
109
|
+
"name" => "512 MB Server",
|
110
|
+
"ram" => 512,
|
111
|
+
"disk" => 20
|
112
|
+
}
|
113
|
+
]
|
114
|
+
}.to_json
|
115
|
+
end
|
116
|
+
|
117
|
+
def find_1_response
|
118
|
+
{
|
119
|
+
"flavor" => {
|
120
|
+
"id" => 1,
|
121
|
+
"name" => "256 MB Server",
|
122
|
+
"ram" => 256,
|
123
|
+
"disk" => 10
|
124
|
+
}
|
125
|
+
}.to_json
|
126
|
+
end
|
127
|
+
|
128
|
+
def find_1_response_reloaded
|
129
|
+
{
|
130
|
+
"flavor" => {
|
131
|
+
"id" => 1,
|
132
|
+
"name" => "256 MB Server",
|
133
|
+
"ram" => 256,
|
134
|
+
"disk" => 100
|
135
|
+
}
|
136
|
+
}.to_json
|
137
|
+
end
|
138
|
+
end
|