right_api_provision 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +68 -0
- data/Rakefile +16 -0
- data/lib/right_api_provision/api15.rb +227 -0
- data/lib/right_api_provision/exception.rb +31 -0
- data/lib/right_api_provision/provisioner.rb +193 -0
- data/lib/right_api_provision/version.rb +3 -0
- data/lib/right_api_provision.rb +4 -0
- data/right_api_provision.gemspec +21 -0
- data/spec/right_api_provision/api15_spec.rb +262 -0
- data/spec/right_api_provision/client_spec_old.rb +342 -0
- data/spec/right_api_provision/provisioner_spec.rb +27 -0
- data/spec/spec_helper.rb +2 -0
- data/test/provisioner_test.rb +42 -0
- metadata +169 -0
@@ -0,0 +1,262 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
require 'right_api_client'
|
4
|
+
|
5
|
+
describe "API15 object" do
|
6
|
+
|
7
|
+
BAD_USER_DATA = "RS_server=my.rightscale.com&RS_token=89eeb0b19af40b5b72668dc3caa9934a&RS_sketchy=sketchy1-166.rightscale.com"
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
@api = RightApiProvision::API15.new()
|
11
|
+
apiStub = double("RightApi::Client")
|
12
|
+
RightApi::Client.should_receive(:new).and_return(apiStub)
|
13
|
+
@api.connection("someemail", "somepasswd", "someaccountid", "https://my.rightscale.com")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should find deployment by name" do
|
17
|
+
deploymentsStub = double("deployments", :index => [ :name => "my_fake_deployment" ])
|
18
|
+
@api.instance_variable_get("@connection").should_receive(:deployments).and_return(deploymentsStub)
|
19
|
+
@api.find_deployment_by_name("my_fake_deployment")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should raise error if deployment not found by name" do
|
23
|
+
deploymentsStub = double("deployments", :index => nil)
|
24
|
+
@api.instance_variable_get("@connection").should_receive(:deployments).and_return(deploymentsStub)
|
25
|
+
lambda{@api.find_deployment_by_name("my_fake_deployment")}.should raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should raise error if multiple deployments found by name" do
|
29
|
+
deploymentsStub = double("deployments", :index => [ {:name => "my_fake_deployment"}, {:name => "my_fake_deployment2"} ])
|
30
|
+
@api.instance_variable_get("@connection").should_receive(:deployments).and_return(deploymentsStub)
|
31
|
+
lambda{@api.find_deployment_by_name("my_fake_deployment")}.should raise_error
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should find server by name" do
|
35
|
+
serversStub = double("servers", :index => [ :name => "my_fake_server" ])
|
36
|
+
@api.instance_variable_get("@connection").should_receive(:servers).and_return(serversStub)
|
37
|
+
@api.find_server_by_name("my_fake_server")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should raise error if multiple servers found by name" do
|
41
|
+
serversStub = double("servers", :index => [ {:name => "my_fake_server"}, {:name => "my_fake_server2"} ])
|
42
|
+
@api.instance_variable_get("@connection").should_receive(:servers).and_return(serversStub)
|
43
|
+
lambda{@api.find_server_by_name("my_fake_server")}.should raise_error
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should find cloud by name" do
|
47
|
+
cloudsStub = double("clouds", :index => [ :name => "my_fake_cloud" ])
|
48
|
+
@api.instance_variable_get("@connection").should_receive(:clouds).and_return(cloudsStub)
|
49
|
+
@api.find_cloud_by_name("my_fake_cloud")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should raise error if cloud not found by name" do
|
53
|
+
cloudsStub = double("clouds", :index => nil)
|
54
|
+
@api.instance_variable_get("@connection").should_receive(:clouds).and_return(cloudsStub)
|
55
|
+
lambda{@api.find_cloud_by_name("my_fake_cloud")}.should raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should find MCI by name" do
|
59
|
+
mcisStub = double("multi_cloud_images", :index => [ :name => "my_fake_mci" ])
|
60
|
+
@api.instance_variable_get("@connection").should_receive(:multi_cloud_images).and_return(mcisStub)
|
61
|
+
@api.find_mci_by_name("my_fake_mci")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should raise error if multiple MCI found by name" do
|
65
|
+
mcisStub = double("multi_cloud_images", :index => [ {:name => "my_fake_mci"}, {:name => "my_fake_mci2"} ])
|
66
|
+
@api.instance_variable_get("@connection").should_receive(:multi_cloud_images).and_return(mcisStub)
|
67
|
+
lambda{@api.find_mci_by_name("my_fake_mci")}.should raise_error
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should find servertemplate by name" do
|
71
|
+
servertemplatesStub = double("servertemplates", :index => [ double("servertemplate", :name => "my_fake_servertemplate") ])
|
72
|
+
@api.instance_variable_get("@connection").should_receive(:server_templates).and_return(servertemplatesStub)
|
73
|
+
@api.find_servertemplate("my_fake_servertemplate")
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should raise error if no servertemplates found by name" do
|
77
|
+
servertemplatesStub = double("servertemplates", :index => [])
|
78
|
+
@api.instance_variable_get("@connection").should_receive(:server_templates).and_return(servertemplatesStub)
|
79
|
+
lambda{@api.find_servertemplate("my_fake_servertemplate")}.should raise_error
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should raise error if multiple servertemplates found by name" do
|
83
|
+
servertemplatesStub = double("servertemplates", :index => [ double("servertemplate", :name => "my_fake_servertemplate"), double("servertemplate", :name => "my_fake_servertemplate") ])
|
84
|
+
@api.instance_variable_get("@connection").should_receive(:server_templates).and_return(servertemplatesStub)
|
85
|
+
lambda{@api.find_servertemplate("my_fake_servertemplate")}.should raise_error
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should find servertemplate by id" do
|
89
|
+
servertemplatesStub = double("servertemplates", :index => [ :name => "my_fake_servertemplate" ])
|
90
|
+
@api.instance_variable_get("@connection").should_receive(:server_templates).and_return(servertemplatesStub)
|
91
|
+
@api.find_servertemplate(1234)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should create deployment" do
|
95
|
+
deploymentsStub = double("deployments", :create => [ {:name => "my_fake_deployment"} ])
|
96
|
+
@api.instance_variable_get("@connection").should_receive(:deployments).and_return(deploymentsStub)
|
97
|
+
deploymentsStub.should_receive(:create)
|
98
|
+
@api.create_deployment("my_deployment")
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should destroy a deployment" do
|
102
|
+
deploymentsStub = double("deployments", :destroy => nil)
|
103
|
+
deploymentsStub.should_receive(:destroy)
|
104
|
+
@api.destroy_deployment(deploymentsStub)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should create server with the default MCI" do
|
108
|
+
dStub = double("deployment", :href => "/some/fake/path")
|
109
|
+
dsStub = double("deployments", :show => dStub)
|
110
|
+
@api.should_receive(:create_deployment).and_return(dsStub)
|
111
|
+
deployment = @api.create_deployment("my_deployment")
|
112
|
+
|
113
|
+
stStub = double("servertemplate", :href => "/some/fake/path", :show => "")
|
114
|
+
stsStub = double("servertemplates", :show => stStub)
|
115
|
+
@api.should_receive(:find_servertemplate).and_return(stsStub)
|
116
|
+
server_template = @api.find_servertemplate(1234)
|
117
|
+
|
118
|
+
cStub = double("cloud", :href => "/some/fake/path")
|
119
|
+
csStub = double("clouds", :show => cStub)
|
120
|
+
@api.should_receive(:find_cloud_by_name).and_return(csStub)
|
121
|
+
cloud = @api.find_cloud_by_name(1234)
|
122
|
+
|
123
|
+
serversStub = double("servers", :create => [ :name => "my_fake_server" ])
|
124
|
+
@api.instance_variable_get("@connection").should_receive(:servers).and_return(serversStub)
|
125
|
+
@api.create_server(deployment, server_template, nil, cloud, "my_fake_server")
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should create server with the MCI given" do
|
129
|
+
dStub = double("deployment", :href => "/some/fake/path")
|
130
|
+
dsStub = double("deployments", :show => dStub)
|
131
|
+
@api.should_receive(:create_deployment).and_return(dsStub)
|
132
|
+
deployment = @api.create_deployment("my_deployment")
|
133
|
+
|
134
|
+
stStub = double("servertemplate", :href => "/some/fake/path", :show => "")
|
135
|
+
stsStub = double("servertemplates", :show => stStub)
|
136
|
+
@api.should_receive(:find_servertemplate).and_return(stsStub)
|
137
|
+
server_template = @api.find_servertemplate(1234)
|
138
|
+
|
139
|
+
mciStub = double("mci", :href => "/some/fake/path")
|
140
|
+
mcisStub = double("mcis", :show => mciStub)
|
141
|
+
@api.should_receive(:find_mci_by_name).and_return(mcisStub)
|
142
|
+
mci = @api.find_mci_by_name("CentOS")
|
143
|
+
|
144
|
+
cStub = double("cloud", :href => "/some/fake/path")
|
145
|
+
csStub = double("clouds", :show => cStub)
|
146
|
+
@api.should_receive(:find_cloud_by_name).and_return(csStub)
|
147
|
+
cloud = @api.find_cloud_by_name(1234)
|
148
|
+
|
149
|
+
serversStub = double("servers", :create => [ :name => "my_fake_server" ])
|
150
|
+
@api.instance_variable_get("@connection").should_receive(:servers).and_return(serversStub)
|
151
|
+
@api.create_server(deployment, server_template, mci, cloud, "my_fake_server")
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should launch server with inputs" do
|
155
|
+
serverStub = double("server", :name => "foo")
|
156
|
+
serversStub = double("servers", :launch => true, :show => serverStub, :index => [ :name => "my_fake_server" ])
|
157
|
+
@api.should_receive(:create_server).and_return(serversStub)
|
158
|
+
server = @api.create_server("foo", "bar", "my_fake_server")
|
159
|
+
@api.instance_variable_get("@connection").should_receive(:servers).and_return(serversStub)
|
160
|
+
@api.launch_server(server, [ {:name => "input1", :value => 1} ])
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should launch server without inputs" do
|
164
|
+
serverStub = double("server", :name => "foo")
|
165
|
+
serversStub = double("servers", :launch => true, :show => serverStub, :index => [ :name => "my_fake_server" ])
|
166
|
+
@api.should_receive(:create_server).and_return(serversStub)
|
167
|
+
server = @api.create_server("foo", "bar", "my_fake_server")
|
168
|
+
@api.instance_variable_get("@connection").should_receive(:servers).and_return(serversStub)
|
169
|
+
@api.launch_server(server)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "returns user_data" do
|
173
|
+
instanceDataStub = double("idata", :user_data => "someuserdata")
|
174
|
+
instanceStub = double("instance", :show => instanceDataStub)
|
175
|
+
serverDataStub = double("sdata", :current_instance => instanceStub)
|
176
|
+
serverStub = double("server", :show => serverDataStub)
|
177
|
+
serverDataStub.should_receive(:current_instance).with(:view=>"extended")
|
178
|
+
@api.user_data(serverStub).should == "someuserdata"
|
179
|
+
end
|
180
|
+
|
181
|
+
it "returns data_request_url for instance" do
|
182
|
+
@user_data = "RS_rn_url=amqp://b915586461:278a854748@orange2-broker.test.rightscale.com/right_net&RS_rn_id=4985249009&RS_server=orange2-moo.test.rightscale.com&RS_rn_auth=d98106775832c174ffd55bd7b7cb175077574adf&RS_token=b233a57d1d24f27bd8650d0f9b6bfd54&RS_sketchy=sketchy1-145.rightscale.com&RS_rn_host=:0"
|
183
|
+
@request_data_url = "https://my.rightscale.com/servers/data_injection_payload/d98106775832c174ffd55bd7b7cb175077574adf"
|
184
|
+
@api.data_request_url(@user_data).should == @request_data_url
|
185
|
+
end
|
186
|
+
|
187
|
+
it "returns true if server has a current instance" do
|
188
|
+
serverDataStub = double("sdata", :api_methods => [:current_instance])
|
189
|
+
serverStub = double("server", :show => serverDataStub)
|
190
|
+
@api.is_provisioned?(serverStub).should == true
|
191
|
+
end
|
192
|
+
|
193
|
+
it "returns false if server does not have a current instance" do
|
194
|
+
serverDataStub = double("sdata", :api_methods => [])
|
195
|
+
serverStub = double("server", :show => serverDataStub)
|
196
|
+
@api.is_provisioned?(serverStub).should == false
|
197
|
+
end
|
198
|
+
|
199
|
+
it "will not wait if server is in expected state" do
|
200
|
+
@api.should_receive(:server_state).and_return("booting")
|
201
|
+
@api.server_wait_for_state("fakeserver", "booting")
|
202
|
+
end
|
203
|
+
|
204
|
+
it "throws an error if server is stranded" do
|
205
|
+
@api.should_receive(:server_state).and_return("stranded")
|
206
|
+
@api.set_bad_states([ "stranded", "terminated"])
|
207
|
+
lambda{@api.server_wait_for_state("fakeserver", "operational")}.should raise_error
|
208
|
+
end
|
209
|
+
|
210
|
+
it "returns the server's cloud" do
|
211
|
+
cData = double("clouddata", :name => "cloudname")
|
212
|
+
cStub = double("cloud", :show => cData)
|
213
|
+
@api.should_receive(:instance_from_server)
|
214
|
+
@api.should_receive(:cloud_from_instance).and_return(cStub)
|
215
|
+
@api.server_cloud_name("foo").should == "cloudname"
|
216
|
+
end
|
217
|
+
|
218
|
+
it "returns the current instance from the server is provisioned" do
|
219
|
+
serverDataStub = double("sdata", :current_instance => "current")
|
220
|
+
serverStub = double("server", :show => serverDataStub)
|
221
|
+
@api.should_receive(:is_provisioned?).and_return(true)
|
222
|
+
@api.send(:instance_from_server, serverStub).should == "current"
|
223
|
+
end
|
224
|
+
|
225
|
+
it "returns the next instance from the server is not provisioned" do
|
226
|
+
serverDataStub = double("sdata", :next_instance => "next")
|
227
|
+
serverStub = double("server", :show => serverDataStub)
|
228
|
+
@api.should_receive(:is_provisioned?).and_return(false)
|
229
|
+
@api.send(:instance_from_server, serverStub).should == "next"
|
230
|
+
end
|
231
|
+
|
232
|
+
it "returns server state" do
|
233
|
+
instanceDataStub = double("idata", :state => "booting")
|
234
|
+
instanceStub = double("instance", :show => instanceDataStub)
|
235
|
+
@api.should_receive(:instance_from_server).and_return(instanceStub)
|
236
|
+
@api.send(:server_state, "server").should == "booting"
|
237
|
+
end
|
238
|
+
|
239
|
+
it "returns the cloud from the instance" do
|
240
|
+
instanceDataStub = double("idata", :cloud => "somecloudobj")
|
241
|
+
instanceStub = double("instance", :show => instanceDataStub)
|
242
|
+
@api.send(:cloud_from_instance, instanceStub).should == "somecloudobj"
|
243
|
+
end
|
244
|
+
|
245
|
+
it "sets inputs on the next instance" do
|
246
|
+
inputsStub = double("inputs")
|
247
|
+
inputsStub.should_receive(:multi_update).with({"inputs" => "heynow"})
|
248
|
+
instanceDataStub = double("idata", :inputs => inputsStub)
|
249
|
+
instanceStub = double("instance", :show => instanceDataStub)
|
250
|
+
serverDataStub = double("sdata", :next_instance => instanceStub)
|
251
|
+
serverStub = double("server", :show => serverDataStub)
|
252
|
+
@api.set_server_inputs(serverStub, "heynow")
|
253
|
+
end
|
254
|
+
|
255
|
+
it "terminates a server" do
|
256
|
+
serverStub = double("server")
|
257
|
+
serverStub.should_receive(:terminate)
|
258
|
+
@api.terminate_server(serverStub)
|
259
|
+
end
|
260
|
+
|
261
|
+
|
262
|
+
end
|
@@ -0,0 +1,342 @@
|
|
1
|
+
require 'right_api_provision'
|
2
|
+
require 'right_api_client'
|
3
|
+
|
4
|
+
describe RightApiProvision::Client do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
@client = RightApiProvision::Client.instance
|
8
|
+
@server_template = RightApiProvision::Objects::ServerTemplate.new(@client, "href", "name", "revision")
|
9
|
+
@cloud = RightApiProvision::Objects::Cloud.new(@client, "href", "name", "description")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "initializes a connection" do
|
13
|
+
apiStub = double("RightApi::Client")
|
14
|
+
RightApi::Client.should_receive(:new).and_return(apiStub)
|
15
|
+
args = {:email => 'my@email.com', :password => 'my_password', :account_id => 'my_account_id'}
|
16
|
+
@conn = @client.connection(args)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "list_clouds" do
|
20
|
+
it "lists clouds" do
|
21
|
+
list = [
|
22
|
+
double("cloud1", :href => "/some/obj/1", :name => "cumulus1", :description => "a cloud"),
|
23
|
+
double("cloud2", :href => "/some/obj/2", :name => "cumulus2", :description => "a cloud")
|
24
|
+
]
|
25
|
+
@client.should_receive(:list_resources).with(:clouds, :by_name, "cumulus").and_return(list)
|
26
|
+
@client.list_clouds("cumulus").size.should == 2
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns empty array if no clouds found" do
|
30
|
+
@client.should_receive(:list_resources).with(:clouds, :by_name, "cumulus").and_return([])
|
31
|
+
@client.list_clouds("cumulus").size.should == 0
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "find_cloud_by_name" do
|
36
|
+
it "finds a cloud by name" do
|
37
|
+
obj = double("cloud", :href => "/some/obj/1", :name => "stratus", :description => "a cloud")
|
38
|
+
@client.should_receive(:find_resource).with(:clouds, :by_name, "stratus").and_return(obj)
|
39
|
+
cloud = @client.find_cloud_by_name("stratus")
|
40
|
+
cloud.should be_a(RightApiProvision::Objects::Cloud)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns nil if cloud not found by name" do
|
44
|
+
@client.should_receive(:find_resource).with(:clouds, :by_name, "cirrus").and_return(nil)
|
45
|
+
@client.find_cloud_by_name("cirrus").should == nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "list_deployment" do
|
50
|
+
it "lists deployment" do
|
51
|
+
list = [
|
52
|
+
double("deployment1", :href => "/some/obj/1", :name => "cumulus1", :description => "a deployment"),
|
53
|
+
double("deployment2", :href => "/some/obj/2", :name => "cumulus2", :description => "a deployment")
|
54
|
+
]
|
55
|
+
@client.should_receive(:list_resources).with(:deployments, :by_name, "cumulus").and_return(list)
|
56
|
+
@client.list_deployments("cumulus").size.should == 2
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns empty array if no deployments found" do
|
60
|
+
@client.should_receive(:list_resources).with(:deployments, :by_name, "cumulus").and_return([])
|
61
|
+
@client.list_deployments("cumulus").size.should == 0
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "find_deployment_by_name" do
|
66
|
+
it "finds a deployment by name" do
|
67
|
+
obj = double("deployment", :href => "/some/obj/1", :name => "stratus", :description => "a deployment")
|
68
|
+
@client.should_receive(:find_resource).with(:deployments, :by_name, "stratus").and_return(obj)
|
69
|
+
cloud = @client.find_deployment_by_name("stratus")
|
70
|
+
cloud.should be_a(RightApiProvision::Objects::Deployment)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "returns nil if deployment not found by name" do
|
74
|
+
@client.should_receive(:find_resource).with(:deployments, :by_name, "cirrus").and_return(nil)
|
75
|
+
@client.find_deployment_by_name("cirrus").should == nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "list_multi_cloud_images" do
|
80
|
+
it "lists multi_cloud_images" do
|
81
|
+
list = [
|
82
|
+
double("multi_cloud_images1", :href => "/some/obj/1", :name => "cumulus1"),
|
83
|
+
double("multi_cloud_images2", :href => "/some/obj/2", :name => "cumulus2")
|
84
|
+
]
|
85
|
+
@client.should_receive(:list_subresources).with(@server_template, :multi_cloud_images, :by_name, "cumulus").and_return(list)
|
86
|
+
@client.list_multi_cloud_images(@server_template, "cumulus").size.should == 2
|
87
|
+
end
|
88
|
+
|
89
|
+
it "returns empty array if no multi_cloud_images found" do
|
90
|
+
@client.should_receive(:list_subresources).with(@server_template, :multi_cloud_images, :by_name, "cumulus").and_return([])
|
91
|
+
@client.list_multi_cloud_images(@server_template, "cumulus").size.should == 0
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "find_multi_cloud_image_by_name" do
|
96
|
+
it "finds a multi_cloud_image by name" do
|
97
|
+
obj = double("multi_cloud_image", :href => "/some/obj/1", :name => "stratus")
|
98
|
+
@client.should_receive(:find_subresource).with(@server_template, :multi_cloud_images, :by_name, "stratus").and_return(obj)
|
99
|
+
cloud = @client.find_multi_cloud_image_by_name(@server_template, "stratus")
|
100
|
+
cloud.should be_a(RightApiProvision::Objects::MultiCloudImage)
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns nil if multi_cloud_image not found by name" do
|
104
|
+
@client.should_receive(:find_subresource).with(@server_template, :multi_cloud_images, :by_name, "cirrus").and_return(nil)
|
105
|
+
@client.find_multi_cloud_image_by_name(@server_template, "cirrus").should == nil
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "list_security_groups" do
|
110
|
+
it "lists security_groups" do
|
111
|
+
list = [
|
112
|
+
double("security_groups1", :href => "/some/obj/1", :name => "cumulus1", :resource_uid => "1234"),
|
113
|
+
double("security_groups2", :href => "/some/obj/2", :name => "cumulus2", :resource_uid => "5678")
|
114
|
+
]
|
115
|
+
@client.should_receive(:list_subresources).with(@cloud, :security_groups, :by_name, "cumulus").and_return(list)
|
116
|
+
@client.list_security_groups(@cloud, "cumulus").size.should == 2
|
117
|
+
end
|
118
|
+
|
119
|
+
it "returns empty array if no security_groups found" do
|
120
|
+
@client.should_receive(:list_subresources).with(@cloud, :security_groups, :by_name, "cumulus").and_return([])
|
121
|
+
@client.list_security_groups(@cloud, "cumulus").size.should == 0
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "find_security_group_by_name" do
|
126
|
+
it "finds a security_group by name" do
|
127
|
+
obj = double("security_group", :href => "/some/obj/1", :name => "stratus", :resource_uid => "1234")
|
128
|
+
@client.should_receive(:find_subresource).with(@cloud, :security_groups, :by_name, "stratus").and_return(obj)
|
129
|
+
cloud = @client.find_security_group_by_name(@cloud, "stratus")
|
130
|
+
cloud.should be_a(RightApiProvision::Objects::SecurityGroup)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "returns nil if security_group not found by name" do
|
134
|
+
@client.should_receive(:find_subresource).with(@cloud, :security_groups, :by_name, "cirrus").and_return(nil)
|
135
|
+
@client.find_security_group_by_name(@cloud, "cirrus").should == nil
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "list_server_template" do
|
140
|
+
it "lists server_template" do
|
141
|
+
list = [
|
142
|
+
double("server_template", :href => "/some/obj/1", :name => "cumulus1", :revision => "1"),
|
143
|
+
double("server_template", :href => "/some/obj/2", :name => "cumulus2", :revision => "HEAD")
|
144
|
+
]
|
145
|
+
@client.should_receive(:list_resources).with(:server_templates, :by_name, "cumulus").and_return(list)
|
146
|
+
@client.list_server_templates("cumulus").size.should == 2
|
147
|
+
end
|
148
|
+
|
149
|
+
it "returns empty array if no server_templates found" do
|
150
|
+
@client.should_receive(:list_resources).with(:server_templates, :by_name, "cumulus").and_return([])
|
151
|
+
@client.list_server_templates("cumulus").size.should == 0
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "find_server_template" do
|
156
|
+
it "finds a server_template by name" do
|
157
|
+
list = [
|
158
|
+
double("server_template", :href => "/some/obj/1", :name => "cumulus1", :revision => "1"),
|
159
|
+
double("server_template", :href => "/some/obj/2", :name => "cumulus2", :revision => "HEAD")
|
160
|
+
]
|
161
|
+
@client.should_receive(:list_resources).with(:server_templates, :by_name, "stratus").and_return(list)
|
162
|
+
cloud = @client.find_server_template("stratus")
|
163
|
+
cloud.should be_a(RightApiProvision::Objects::ServerTemplate)
|
164
|
+
end
|
165
|
+
|
166
|
+
it "finds a server_template by id" do
|
167
|
+
obj = double("server_template", :href => "/some/obj/1", :name => "stratus", :revision => "HEAD")
|
168
|
+
servertemplatesStub = double("servertemplates", :index => obj)
|
169
|
+
@client.handle.should_receive(:server_templates).and_return(servertemplatesStub)
|
170
|
+
cloud = @client.find_server_template(1)
|
171
|
+
cloud.should be_a(RightApiProvision::Objects::ServerTemplate)
|
172
|
+
end
|
173
|
+
|
174
|
+
it "returns nil if server_template not found by name" do
|
175
|
+
@client.should_receive(:list_resources).with(:server_templates, :by_name, "cirrus").and_return([])
|
176
|
+
@client.find_server_template("cirrus").should == nil
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe "list_servers" do
|
181
|
+
it "lists servers" do
|
182
|
+
list = [
|
183
|
+
double("server1", :href => "/some/obj/1", :name => "cumulus1", :description => "a server"),
|
184
|
+
double("server2", :href => "/some/obj/2", :name => "cumulus2", :description => "a server")
|
185
|
+
]
|
186
|
+
@client.should_receive(:list_resources).with(:servers, :by_name, "cumulus").and_return(list)
|
187
|
+
@client.list_servers("cumulus").size.should == 2
|
188
|
+
end
|
189
|
+
|
190
|
+
it "returns empty array if no servers found" do
|
191
|
+
@client.should_receive(:list_resources).with(:servers, :by_name, "cumulus").and_return([])
|
192
|
+
@client.list_servers("cumulus").size.should == 0
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe "find_server_by_name" do
|
197
|
+
it "finds a server by name" do
|
198
|
+
obj = double("server", :href => "/some/obj/1", :name => "stratus", :description => "a server")
|
199
|
+
@client.should_receive(:find_resource).with(:servers, :by_name, "stratus").and_return(obj)
|
200
|
+
cloud = @client.find_server_by_name("stratus")
|
201
|
+
cloud.should be_a(RightApiProvision::Objects::Server)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "returns nil if server not found by name" do
|
205
|
+
@client.should_receive(:find_resource).with(:servers, :by_name, "cirrus").and_return(nil)
|
206
|
+
@client.find_server_by_name("cirrus").should == nil
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
describe "private find_resource" do
|
211
|
+
it "finds a resource" do
|
212
|
+
resourcesStub = double("servers", :index => [ double("server", :name => "my_fake_resource", :id => 12345) ])
|
213
|
+
@client.handle.should_receive(:servers).and_return(resourcesStub)
|
214
|
+
r = @client.send(:find_resource, :servers, :by_name, "my_fake_resource")
|
215
|
+
r.should_not == nil
|
216
|
+
end
|
217
|
+
|
218
|
+
it "raises if duplicate resources are found" do
|
219
|
+
serversStub = double("servers", :index => [ {:name => "my_fake_resource"}, {:name => "my_fake_resource"} ])
|
220
|
+
@client.handle.should_receive(:servers).and_return(serversStub)
|
221
|
+
lambda{@client.send(:find_resource, :servers, :by_name, "my_fake_resource")}.should raise_error RightApiProvision::MultipleMatchesFound
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
describe "private list_resources" do
|
226
|
+
it "lists resources" do
|
227
|
+
servertemplatesStub =
|
228
|
+
double("servertemplates", :index => [
|
229
|
+
double("servertemplate", :name => "my_fake_servertemplate1"),
|
230
|
+
double("servertemplate", :name => "my_fake_servertemplate2")
|
231
|
+
])
|
232
|
+
@client.handle.should_receive(:server_templates).and_return(servertemplatesStub)
|
233
|
+
list = @client.send(:list_resources, :server_templates, :by_name, "my_fake_resource")
|
234
|
+
list.size.should == 2
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
describe "private find_subresource" do
|
239
|
+
|
240
|
+
it "finds a subresource" do
|
241
|
+
subresourceStub =
|
242
|
+
double("subresources", :index => [
|
243
|
+
double("subresource", :name => "subresource1")
|
244
|
+
])
|
245
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
246
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
247
|
+
@client.handle.should_receive(:mocks).and_return(resourceStub)
|
248
|
+
r = @client.send(:find_subresource, resourceStub, :subresource, :by_name, "subresource1")
|
249
|
+
r.should_not == nil
|
250
|
+
end
|
251
|
+
|
252
|
+
it "raises if duplicate subresources are found" do
|
253
|
+
subresourceStub =
|
254
|
+
double("subresources", :index => [
|
255
|
+
double("subresource", :name => "subresource1"),
|
256
|
+
double("subresource", :name => "subresource2")
|
257
|
+
])
|
258
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
259
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
260
|
+
@client.handle.should_receive(:mocks).and_return(resourceStub)
|
261
|
+
lambda{@client.send(:find_subresource, resourceStub, :subresource, :by_name, "subresource1")}.should raise_error RightApiProvision::MultipleMatchesFound
|
262
|
+
end
|
263
|
+
|
264
|
+
it "raises if subresource param is not a Symbol" do
|
265
|
+
subresourceStub =
|
266
|
+
double("subresources", :index => [
|
267
|
+
double("subresource", :name => "subresource2")
|
268
|
+
])
|
269
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
270
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
271
|
+
lambda{@client.send(:find_subresource, resourceStub, "subresource", :by_name, "subresource1")}.should raise_error ArgumentError
|
272
|
+
end
|
273
|
+
|
274
|
+
# it "raises if type param is not kind of RightApi::Resource class" do
|
275
|
+
# lambda{@client.send(:find_subresource, :server_template, "subresource", :by_name, "subresource1")}.should raise_error ArgumentError
|
276
|
+
# end
|
277
|
+
|
278
|
+
it "raises if filter_value param is not a String" do
|
279
|
+
subresourceStub =
|
280
|
+
double("subresources", :index => [
|
281
|
+
double("subresource", :name => "subresource2")
|
282
|
+
])
|
283
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
284
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
285
|
+
lambda{@client.send(:find_subresource, resourceStub, :subresource, :by_name, :subresource1)}.should raise_error ArgumentError
|
286
|
+
end
|
287
|
+
|
288
|
+
it "raises if filter_key param is not a Symbol" do
|
289
|
+
subresourceStub =
|
290
|
+
double("subresources", :index => [
|
291
|
+
double("subresource", :name => "subresource2")
|
292
|
+
])
|
293
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
294
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
295
|
+
lambda{@client.send(:find_subresource, resourceStub, :subresource, "by_name", :subresource1)}.should raise_error ArgumentError
|
296
|
+
end
|
297
|
+
|
298
|
+
it "raises if filter_key param does not start with 'by_'" do
|
299
|
+
subresourceStub =
|
300
|
+
double("subresources", :index => [
|
301
|
+
double("subresource", :name => "subresource2")
|
302
|
+
])
|
303
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
304
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
305
|
+
lambda{@client.send(:find_subresource, resourceStub, :subresource, :buy_name, :subresource1)}.should raise_error ArgumentError
|
306
|
+
end
|
307
|
+
|
308
|
+
end
|
309
|
+
|
310
|
+
|
311
|
+
describe "private list_subresources" do
|
312
|
+
it "lists subresources" do
|
313
|
+
subresourceStub =
|
314
|
+
double("subresources", :index => [
|
315
|
+
double("subresource", :name => "subresource1"),
|
316
|
+
double("subresource", :name => "subresource2")
|
317
|
+
])
|
318
|
+
subresourcesStub = double("subresources", :subresource => subresourceStub )
|
319
|
+
resourceStub = double("resource", :show => subresourcesStub, :id => "1")
|
320
|
+
@client.handle.should_receive(:mocks).and_return(resourceStub)
|
321
|
+
list = @client.send(:list_subresources, resourceStub, :subresource, :by_name, "my_fake_resource")
|
322
|
+
list.size.should == 2
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe "private assert_kind_of" do
|
327
|
+
it "throws exception if not kind of" do
|
328
|
+
lambda{
|
329
|
+
@client.send(:assert_kind_of, "not a string", ["hey","now"], String)
|
330
|
+
}.should raise_error ArgumentError
|
331
|
+
end
|
332
|
+
|
333
|
+
it "does nothing if kind of" do
|
334
|
+
@client.send(:assert_kind_of, "string", "hey now", String)
|
335
|
+
end
|
336
|
+
|
337
|
+
it "does nothing if optional and nil" do
|
338
|
+
@client.send(:assert_kind_of, "undefined", nil, String, true)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'right_api_provision'
|
2
|
+
require 'right_api_client'
|
3
|
+
|
4
|
+
describe RightApiProvision::Provisioner do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
it "initializes a connection" do
|
11
|
+
apiStub = double("RightApiProvision::API15")
|
12
|
+
RightApiProvision::API15.should_receive(:new).and_return(apiStub)
|
13
|
+
apiStub.should_receive(:connection)
|
14
|
+
provisioner = RightApiProvision::Provisioner.new('my@email.com', 'my_password', 'my_account_id')
|
15
|
+
provisioner.should_not == nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "initializes a connection with custom endpoint" do
|
19
|
+
apiStub = double("RightApiProvision::API15")
|
20
|
+
RightApiProvision::API15.should_receive(:new).and_return(apiStub)
|
21
|
+
apiStub.should_receive(:connection)
|
22
|
+
provisioner = RightApiProvision::Provisioner.new('my@email.com', 'my_password', 'my_account_id', 'custom_url')
|
23
|
+
provisioner.should_not == nil
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
data/spec/spec_helper.rb
ADDED