right_api_provision 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,2 @@
1
+ require 'right_api_provision'
2
+ require 'right_api_client'