right_api_provision 0.1.0

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.
@@ -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'