cloudfoundry-client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/.gitignore +12 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +12 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +6 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +20 -0
  8. data/README.md +122 -0
  9. data/Rakefile +28 -0
  10. data/cloudfoundry.gemspec +29 -0
  11. data/lib/cloudfoundry.rb +34 -0
  12. data/lib/cloudfoundry/client.rb +93 -0
  13. data/lib/cloudfoundry/client/apps.rb +192 -0
  14. data/lib/cloudfoundry/client/info.rb +29 -0
  15. data/lib/cloudfoundry/client/request.rb +89 -0
  16. data/lib/cloudfoundry/client/resources.rb +16 -0
  17. data/lib/cloudfoundry/client/response.rb +68 -0
  18. data/lib/cloudfoundry/client/services.rb +122 -0
  19. data/lib/cloudfoundry/client/users.rb +121 -0
  20. data/lib/cloudfoundry/constants.rb +30 -0
  21. data/lib/cloudfoundry/exception.rb +24 -0
  22. data/lib/cloudfoundry/version.rb +27 -0
  23. data/spec/client/apps_spec.rb +423 -0
  24. data/spec/client/info_spec.rb +92 -0
  25. data/spec/client/resources_spec.rb +52 -0
  26. data/spec/client/services_spec.rb +230 -0
  27. data/spec/client/users_spec.rb +367 -0
  28. data/spec/client_spec.rb +110 -0
  29. data/spec/cloudfoundry_spec.rb +62 -0
  30. data/spec/fixtures/admin_logged/client.yml +85 -0
  31. data/spec/fixtures/admin_logged/users.yml +363 -0
  32. data/spec/fixtures/admin_logged/users_create_action.yml +36 -0
  33. data/spec/fixtures/admin_logged/users_proxy_action.yml +46 -0
  34. data/spec/fixtures/admin_logged/users_proxy_nouser_action.yml +44 -0
  35. data/spec/fixtures/admin_logged/users_unproxy_action.yml +44 -0
  36. data/spec/fixtures/app.js +16 -0
  37. data/spec/fixtures/app.zip +0 -0
  38. data/spec/fixtures/client.yml +151 -0
  39. data/spec/fixtures/client_invalid.yml +85 -0
  40. data/spec/fixtures/cloudfoundry.yml +124 -0
  41. data/spec/fixtures/cloudfoundry_vs_client.yml +159 -0
  42. data/spec/fixtures/no_logged/apps.yml +42 -0
  43. data/spec/fixtures/no_logged/client.yml +42 -0
  44. data/spec/fixtures/no_logged/info.yml +81 -0
  45. data/spec/fixtures/no_logged/resources.yml +42 -0
  46. data/spec/fixtures/no_logged/services.yml +42 -0
  47. data/spec/fixtures/no_logged/users.yml +108 -0
  48. data/spec/fixtures/no_logged/users_login_action.yml +81 -0
  49. data/spec/fixtures/no_logged/users_proxy_action.yml +42 -0
  50. data/spec/fixtures/no_logged/users_unproxy_action.yml +42 -0
  51. data/spec/fixtures/user_logged/apps.yml +828 -0
  52. data/spec/fixtures/user_logged/apps_create_action.yml +42 -0
  53. data/spec/fixtures/user_logged/apps_directory_action.yml +48 -0
  54. data/spec/fixtures/user_logged/apps_download_action.yml +55 -0
  55. data/spec/fixtures/user_logged/apps_file_action.yml +54 -0
  56. data/spec/fixtures/user_logged/apps_start_action.yml +81 -0
  57. data/spec/fixtures/user_logged/apps_stats_action.yml +44 -0
  58. data/spec/fixtures/user_logged/apps_update_info_action.yml +44 -0
  59. data/spec/fixtures/user_logged/apps_upload_filename_action.yml +62 -0
  60. data/spec/fixtures/user_logged/apps_upload_zipfile_action.yml +62 -0
  61. data/spec/fixtures/user_logged/client.yml +85 -0
  62. data/spec/fixtures/user_logged/info.yml +126 -0
  63. data/spec/fixtures/user_logged/resources.yml +44 -0
  64. data/spec/fixtures/user_logged/resources_check_action.yml +42 -0
  65. data/spec/fixtures/user_logged/services.yml +354 -0
  66. data/spec/fixtures/user_logged/services_bind_action.yml +161 -0
  67. data/spec/fixtures/user_logged/services_create_action.yml +83 -0
  68. data/spec/fixtures/user_logged/services_unbind_action.yml +122 -0
  69. data/spec/fixtures/user_logged/services_unbind_fail_action.yml +122 -0
  70. data/spec/fixtures/user_logged/users.yml +299 -0
  71. data/spec/fixtures/user_logged/users_proxy_action.yml +44 -0
  72. data/spec/fixtures/user_logged/users_unproxy_action.yml +44 -0
  73. data/spec/spec_helper.rb +29 -0
  74. data/spec/support/cf_connection_helper.rb +26 -0
  75. data/spec/support/vcr.rb +8 -0
  76. metadata +235 -0
@@ -0,0 +1,92 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Cloudfoundry::Client::Info" do
4
+ include CfConnectionHelper
5
+
6
+ context "without a user logged in" do
7
+ before(:all) do
8
+ VCR.use_cassette("no_logged/client", :record => :new_episodes) do
9
+ @cf_client = client_no_logged()
10
+ end
11
+ end
12
+
13
+ use_vcr_cassette "no_logged/info", :record => :new_episodes
14
+
15
+ it "should properly get basic information from target cloud" do
16
+ cloud_info = @cf_client.cloud_info()
17
+ cloud_info.should have_key :name
18
+ cloud_info.should have_key :build
19
+ cloud_info.should have_key :support
20
+ cloud_info.should have_key :version
21
+ cloud_info.should have_key :description
22
+ cloud_info.should have_key :allow_debug
23
+ end
24
+
25
+ it "should not return user account information from target cloud" do
26
+ cloud_info = @cf_client.cloud_info()
27
+ cloud_info.should_not have_key :user
28
+ cloud_info.should_not have_key :usage
29
+ cloud_info.should_not have_key :limits
30
+ end
31
+
32
+ it "should get a proper list of runtimes available at target cloud" do
33
+ cloud_runtimes_info = @cf_client.cloud_runtimes_info()
34
+ cloud_runtimes_info.should have_at_least(1).items
35
+ runtime_info = cloud_runtimes_info.first[1]
36
+ runtime_info.should have_key :version
37
+ end
38
+
39
+ it "should raise an AuthError exception when requesting system services" do
40
+ expect {
41
+ cloud_services_info = @cf_client.cloud_services_info()
42
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
43
+ end
44
+ end
45
+
46
+ context "with a user logged in" do
47
+ before(:all) do
48
+ VCR.use_cassette("user_logged/client", :record => :new_episodes) do
49
+ @cf_client = client_user_logged()
50
+ end
51
+ end
52
+
53
+ use_vcr_cassette "user_logged/info", :record => :new_episodes
54
+
55
+ it "should properly get basic account information from target cloud" do
56
+ cloud_info = @cf_client.cloud_info()
57
+ cloud_info.should have_key :name
58
+ cloud_info.should have_key :build
59
+ cloud_info.should have_key :support
60
+ cloud_info.should have_key :version
61
+ cloud_info.should have_key :description
62
+ cloud_info.should have_key :allow_debug
63
+ end
64
+
65
+ it "should properly get user account information from target cloud" do
66
+ cloud_info = @cf_client.cloud_info()
67
+ cloud_info.should have_key :user
68
+ cloud_info.should have_key :usage
69
+ cloud_info.should have_key :limits
70
+ cloud_info[:user].should eql(@user)
71
+ end
72
+
73
+ it "should get a proper list of runtimes available at target cloud" do
74
+ cloud_runtimes_info = @cf_client.cloud_runtimes_info()
75
+ cloud_runtimes_info.should have_at_least(1).items
76
+ runtime_info = cloud_runtimes_info.first[1]
77
+ runtime_info.should have_key :version
78
+ end
79
+
80
+ it "should get a proper list of system services available at target cloud" do
81
+ cloud_services_info = @cf_client.cloud_services_info()
82
+ cloud_services_info.should have_at_least(1).items
83
+ system_service_info = cloud_services_info.first[1].values[0].first[1]
84
+ system_service_info.should have_key :id
85
+ system_service_info.should have_key :type
86
+ system_service_info.should have_key :vendor
87
+ system_service_info.should have_key :version
88
+ system_service_info.should have_key :description
89
+ system_service_info.should have_key :tiers
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Cloudfoundry::Client::Resources" do
4
+ include CfConnectionHelper
5
+
6
+ context "without a user logged in" do
7
+ before(:all) do
8
+ VCR.use_cassette("no_logged/client", :record => :new_episodes) do
9
+ @cf_client = client_no_logged()
10
+ end
11
+ end
12
+
13
+ use_vcr_cassette "no_logged/resources", :record => :new_episodes
14
+
15
+ it "should raise an AuthError exception when checking resources at target cloud" do
16
+ expect {
17
+ resources = []
18
+ resources_manifest = @cf_client.check_resources(resources)
19
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
20
+ end
21
+ end
22
+
23
+ context "with a user logged in" do
24
+ before(:all) do
25
+ VCR.use_cassette("user_logged/client", :record => :new_episodes) do
26
+ @cf_client = client_user_logged()
27
+ end
28
+ end
29
+
30
+ use_vcr_cassette "user_logged/resources", :record => :new_episodes
31
+
32
+ it "should properly get an empty resources manifest file from target cloud" do
33
+ resources = []
34
+ resources_manifest = @cf_client.check_resources(resources)
35
+ resources_manifest.should be_empty
36
+ end
37
+
38
+ it "should properly get a resources manifest file from target cloud" do
39
+ VCR.use_cassette("user_logged/resources_check_action", :record => :new_episodes, :exclusive => true) do
40
+ resources = []
41
+ filename = spec_fixture("app.js")
42
+ resources << {
43
+ :size => File.size(filename),
44
+ :sha1 => Digest::SHA1.file(filename).hexdigest,
45
+ :fn => filename
46
+ }
47
+ resources_manifest = @cf_client.check_resources(resources)
48
+ resources_manifest.should eql(resources)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,230 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Cloudfoundry::Client::Services" do
4
+ include CfConnectionHelper
5
+
6
+ context "without a user logged in" do
7
+ before(:all) do
8
+ VCR.use_cassette("no_logged/client", :record => :new_episodes) do
9
+ @cf_client = client_no_logged()
10
+ end
11
+ end
12
+
13
+ use_vcr_cassette "no_logged/services", :record => :new_episodes
14
+
15
+ it "should raise an AuthError exception when creating a provisioned service" do
16
+ expect {
17
+ created = @cf_client.create_service("redis", "redis-mock")
18
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
19
+ end
20
+
21
+ it "should raise an AuthError exception when listing provisioned services at target cloud" do
22
+ expect {
23
+ services = @cf_client.list_services()
24
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
25
+ end
26
+
27
+ it "should raise an AuthError exception when retrieving provisioned service information from target cloud" do
28
+ expect {
29
+ service_info = @cf_client.service_info("redis-mock")
30
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
31
+ end
32
+
33
+ it "should raise an AuthError exception when binding a provisioned service to an application at target cloud" do
34
+ expect {
35
+ binded = @cf_client.bind_service("redis-mock", "newapp")
36
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
37
+ end
38
+
39
+ it "should raise an AuthError exception when unbinding a provisioned service to an application at target cloud" do
40
+ expect {
41
+ unbinded = @cf_client.unbind_service("redis-mock", "newapp")
42
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
43
+ end
44
+
45
+ it "should raise an AuthError exception when deleting a provisioned service at target cloud" do
46
+ expect {
47
+ deleted = @cf_client.delete_service("redis-mock")
48
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
49
+ end
50
+ end
51
+
52
+ context "with a user logged in" do
53
+ before(:all) do
54
+ VCR.use_cassette("user_logged/client", :record => :new_episodes) do
55
+ @cf_client = client_user_logged()
56
+ end
57
+ end
58
+
59
+ use_vcr_cassette "user_logged/services", :record => :new_episodes
60
+
61
+ it "should raise a BadParams exception when creating a provisioned service with a blank system service" do
62
+ expect {
63
+ created = @cf_client.create_service("", "redis-mock")
64
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
65
+ end
66
+
67
+ it "should raise a BadParams exception when creating a provisioned service with a blank name" do
68
+ expect {
69
+ created = @cf_client.create_service("redis", "")
70
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
71
+ end
72
+
73
+ it "should raise a BadParams exception when creating a provisioned service with an invalid system service" do
74
+ expect {
75
+ created = @cf_client.create_service("noservice", "redis-mock")
76
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
77
+ end
78
+
79
+ it "should return true if a new provisioned service is created at target cloud" do
80
+ VCR.use_cassette("user_logged/services_create_action", :record => :new_episodes, :exclusive => true) do
81
+ created = @cf_client.create_service("redis", "redis-mock")
82
+ created.should be_true
83
+ end
84
+ end
85
+
86
+ it "should raise a BadRequest exception when creating a provisioned service that already exists at target cloud" do
87
+ expect {
88
+ created = @cf_client.create_service("redis", "redis-mock")
89
+ }.to raise_exception(CloudFoundry::Client::Exception::BadRequest)
90
+ end
91
+
92
+ it "should get a proper list of provisioned services at target cloud" do
93
+ services = @cf_client.list_services()
94
+ services.should have_at_least(1).items
95
+ service_info = services.first
96
+ service_info.should have_key :type
97
+ service_info.should have_key :vendor
98
+ service_info.should have_key :name
99
+ service_info.should have_key :version
100
+ service_info.should have_key :tier
101
+ service_info.should have_key :meta
102
+ service_info.should have_key :properties
103
+ end
104
+
105
+ it "should raise a BadParams exception when retrieving information about a provisioned service with a blank name" do
106
+ expect {
107
+ service_info = @cf_client.service_info("")
108
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
109
+ end
110
+
111
+ it "should raise a NotFound exception when retrieving information about a provisioned service that does not exists at target cloud" do
112
+ expect {
113
+ service_info = @cf_client.service_info("noservice")
114
+ }.to raise_exception(CloudFoundry::Client::Exception::NotFound)
115
+ end
116
+
117
+ it "should properly get provisioned service information from target cloud" do
118
+ service_info = @cf_client.service_info("redis-mock")
119
+ service_info.should have_key :type
120
+ service_info.should have_key :vendor
121
+ service_info.should have_key :name
122
+ service_info.should have_key :version
123
+ service_info.should have_key :tier
124
+ service_info.should have_key :meta
125
+ service_info.should have_key :properties
126
+ end
127
+
128
+ it "should raise a BadParams exception when binding to an application a provisioned service with a blank name" do
129
+ expect {
130
+ binded = @cf_client.bind_service("", "appname")
131
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
132
+ end
133
+
134
+ it "should raise a BadParams exception when binding a provisioned service to an application with a blank name" do
135
+ expect {
136
+ binded = @cf_client.bind_service("redis-mock", "")
137
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
138
+ end
139
+
140
+ it "should raise a NotFound exception when binding to an application a provisioned service that does not exists" do
141
+ expect {
142
+ binded = @cf_client.bind_service("noservice", "appname")
143
+ }.to raise_exception(CloudFoundry::Client::Exception::NotFound)
144
+ end
145
+
146
+ it "should raise a NotFound exception when binding a provisioned service to an application that does not exists" do
147
+ expect {
148
+ binded = @cf_client.bind_service("redis-mock", "appname")
149
+ }.to raise_exception(CloudFoundry::Client::Exception::NotFound)
150
+ end
151
+
152
+ it "should return true if a provisioned service is binded to an application at target cloud" do
153
+ VCR.use_cassette("user_logged/services_bind_action", :record => :new_episodes, :exclusive => true) do
154
+ manifest = {
155
+ :name => "newapp",
156
+ :uris => ["newapp.vcap.me"],
157
+ :instances => 1,
158
+ :staging => {:model => "node"},
159
+ :resources => {:memory => 64}
160
+ }
161
+ created = @cf_client.create_app("newapp", manifest)
162
+ binded = @cf_client.bind_service("redis-mock", "newapp")
163
+ binded.should be_true
164
+ end
165
+ end
166
+
167
+ it "should raise a BadParams exception when binding a provisioned service to an application already binded" do
168
+ expect {
169
+ binded = @cf_client.bind_service("redis-mock", "newapp")
170
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
171
+ end
172
+
173
+ it "should raise a BadParams exception when unbinding from an application a provisioned service with a blank name" do
174
+ expect {
175
+ unbinded = @cf_client.unbind_service("", "appname")
176
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
177
+ end
178
+
179
+ it "should raise a BadParams exception when unbinding a provisioned service from an application with a blank name" do
180
+ expect {
181
+ unbinded = @cf_client.unbind_service("redis-mock", "")
182
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
183
+ end
184
+
185
+ it "should raise a NotFound exception when unbinding a provisioned service that does not exists from an application" do
186
+ expect {
187
+ unbinded = @cf_client.unbind_service("noservice", "appname")
188
+ }.to raise_exception(CloudFoundry::Client::Exception::NotFound)
189
+ end
190
+
191
+ it "should raise a NotFound exception when unbinding a provisioned service from an application that does not exists" do
192
+ expect {
193
+ unbinded = @cf_client.unbind_service("redis-mock", "appname")
194
+ }.to raise_exception(CloudFoundry::Client::Exception::NotFound)
195
+ end
196
+
197
+ it "should return true if a provisioned service is binded to an application at target cloud" do
198
+ VCR.use_cassette("user_logged/services_unbind_action", :record => :new_episodes, :exclusive => true) do
199
+ unbinded = @cf_client.unbind_service("redis-mock", "newapp")
200
+ unbinded.should be_true
201
+ end
202
+ end
203
+
204
+ it "should raise a BadParams exception when unbinding a provisioned service from an application that is not binded" do
205
+ VCR.use_cassette("user_logged/services_unbind_fail_action", :record => :new_episodes, :exclusive => true) do
206
+ expect {
207
+ unbinded = @cf_client.unbind_service("redis-mock", "newapp")
208
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
209
+ deleted = @cf_client.delete_app("newapp")
210
+ end
211
+ end
212
+
213
+ it "should raise a BadParams exception when deleting a provisioned service with a blank name" do
214
+ expect {
215
+ deleted = @cf_client.delete_service("")
216
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
217
+ end
218
+
219
+ it "should raise a NotFound exception when deleting a provisioned service that does not exists at target cloud" do
220
+ expect {
221
+ deleted = @cf_client.delete_service("noservice")
222
+ }.to raise_exception(CloudFoundry::Client::Exception::NotFound)
223
+ end
224
+
225
+ it "should return true if a provisioned service is deleted at target cloud" do
226
+ deleted = @cf_client.delete_service("redis-mock")
227
+ deleted.should be_true
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,367 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Cloudfoundry::Client::Users" do
4
+ include CfConnectionHelper
5
+
6
+ context "without a user logged in" do
7
+ before(:all) do
8
+ VCR.use_cassette("no_logged/client", :record => :new_episodes) do
9
+ @cf_client = client_no_logged()
10
+ end
11
+ end
12
+
13
+ use_vcr_cassette "no_logged/users", :record => :new_episodes
14
+
15
+ it "should return true if a new user is created at target cloud" do
16
+ created = @cf_client.create_user("fakeuser1@vcap.me", "foobar")
17
+ created.should be_true
18
+ end
19
+
20
+ it "should raise an AuthError exception when listing all users at target cloud" do
21
+ expect {
22
+ users = @cf_client.list_users()
23
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
24
+ end
25
+
26
+ it "should raise an AuthError exception when retrieving user information from target cloud" do
27
+ expect {
28
+ user_info = @cf_client.user_info("user@vcap.me")
29
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
30
+ end
31
+
32
+ it "should raise an AuthError exception when updating a user at target cloud" do
33
+ expect {
34
+ updated = @cf_client.update_user("user@vcap.me", "foobar")
35
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
36
+ end
37
+
38
+ it "should raise an AuthError exception when deleting a user at target cloud" do
39
+ expect {
40
+ deleted = @cf_client.delete_user("user@vcap.me")
41
+ }.to raise_exception(CloudFoundry::Client::Exception::AuthError)
42
+ end
43
+
44
+ it "should allow to proxy a user" do
45
+ proxied_user = @cf_client.set_proxy_user("user@vcap.me")
46
+ proxied_user.should eql("user@vcap.me")
47
+ proxied_user.should eql(@cf_client.proxy_user)
48
+ end
49
+
50
+ it "should raise a Forbidden exception when retrieving proxy user account information from target cloud" do
51
+ VCR.use_cassette("no_logged/users_proxy_action", :record => :new_episodes, :exclusive => true) do
52
+ expect {
53
+ proxied_user = @cf_client.set_proxy_user("user@vcap.me")
54
+ cloud_info = @cf_client.cloud_info()
55
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
56
+ end
57
+ end
58
+
59
+ it "should allow to unproxy a user" do
60
+ proxied_user = @cf_client.unset_proxy_user()
61
+ proxied_user.should be_nil
62
+ @cf_client.proxy_user.should be_nil
63
+ end
64
+
65
+ it "should not get user account information from target cloud" do
66
+ VCR.use_cassette("no_logged/users_unproxy_action", :record => :new_episodes, :exclusive => true) do
67
+ proxied_user = @cf_client.unset_proxy_user()
68
+ cloud_info = @cf_client.cloud_info()
69
+ cloud_info.should_not have_key :user
70
+ end
71
+ end
72
+
73
+ it "should raise a BadParams exception when login with a blank email" do
74
+ expect {
75
+ @cf_client.login("", "foobar")
76
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
77
+ end
78
+
79
+ it "should raise a BadParams exception when login with a blank password" do
80
+ expect {
81
+ @cf_client.login("user@vcap.me", "")
82
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
83
+ end
84
+
85
+ it "should raise a Forbidden exception if login to the target cloud fails" do
86
+ expect {
87
+ @cf_client.login("user@vcap.me", "password")
88
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
89
+ end
90
+
91
+ it "should return false if user is not logged in at target cloud" do
92
+ @cf_client.logged_in?.should be_false
93
+ @cf_client.user.should be_nil
94
+ @cf_client.auth_token.should be_nil
95
+ end
96
+
97
+ it "should allow to login correctly at target cloud and return an auth_token" do
98
+ VCR.use_cassette("no_logged/users_login_action", :record => :new_episodes, :exclusive => true) do
99
+ auth_token = @cf_client.login("user@vcap.me", "foobar")
100
+ @cf_client.user.should_not be_nil
101
+ @cf_client.user.should eql("user@vcap.me")
102
+ @cf_client.auth_token.should_not be_nil
103
+ @cf_client.auth_token.should eql(auth_token)
104
+ end
105
+ end
106
+
107
+ it "should return true if user is logged in at target cloud" do
108
+ VCR.use_cassette("no_logged/users_login_action", :record => :new_episodes, :exclusive => true) do
109
+ @cf_client.logged_in?.should be_true
110
+ end
111
+ end
112
+ end
113
+
114
+ context "with a user logged in" do
115
+ before(:all) do
116
+ VCR.use_cassette("user_logged/client", :record => :new_episodes) do
117
+ @cf_client = client_user_logged()
118
+ end
119
+ end
120
+
121
+ use_vcr_cassette "user_logged/users", :record => :new_episodes
122
+
123
+ it "should return true if a new user is created at target cloud" do
124
+ created = @cf_client.create_user("fakeuser2@vcap.me", "foobar")
125
+ created.should be_true
126
+ end
127
+
128
+ it "should raise a Forbidden exception when listing all users at target cloud" do
129
+ expect {
130
+ users = @cf_client.list_users()
131
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
132
+ end
133
+
134
+ it "should raise an Forbidden exception when retrieving not own user information from target cloud" do
135
+ expect {
136
+ user_info = @cf_client.user_info("fakeuser1@vcap.me")
137
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
138
+ end
139
+
140
+ it "should properly get basic user information from target cloud" do
141
+ user_info = @cf_client.user_info("user@vcap.me")
142
+ user_info.should have_key :email
143
+ end
144
+
145
+ it "should raise a Forbidden exception when updating not own user at target cloud" do
146
+ expect {
147
+ updated = @cf_client.update_user("fakeuser1@vcap.me", "foobar")
148
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
149
+ end
150
+
151
+ it "should return true if a user is updated at target cloud" do
152
+ updated = @cf_client.update_user("user@vcap.me", "foobar")
153
+ updated.should be_true
154
+ end
155
+
156
+ it "should raise a Forbidden exception when deleting not now user at target cloud" do
157
+ expect {
158
+ deleted = @cf_client.delete_user("fakeuser1@vcap.me")
159
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
160
+ end
161
+
162
+ it "should raise a Forbidden exception when deleting a user at target cloud" do
163
+ expect {
164
+ deleted = @cf_client.delete_user("user@vcap.me")
165
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
166
+ end
167
+
168
+ it "should allow to proxy a user" do
169
+ proxied_user = @cf_client.set_proxy_user("fakeuser1@vcap.me")
170
+ proxied_user.should eql("fakeuser1@vcap.me")
171
+ proxied_user.should eql(@cf_client.proxy_user)
172
+ end
173
+
174
+ it "should raise a Forbidden exception when retrieving proxy user account information from target cloud" do
175
+ VCR.use_cassette("user_logged/users_proxy_action", :record => :new_episodes, :exclusive => true) do
176
+ expect {
177
+ proxied_user = @cf_client.set_proxy_user("fakeuser1@vcap.me")
178
+ cloud_info = @cf_client.cloud_info()
179
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
180
+ end
181
+ end
182
+
183
+ it "should allow to unproxy a user" do
184
+ proxied_user = @cf_client.unset_proxy_user()
185
+ proxied_user.should be_nil
186
+ @cf_client.proxy_user.should be_nil
187
+ end
188
+
189
+ it "should properly get current user account information from target cloud" do
190
+ VCR.use_cassette("user_logged/users_unproxy_action", :record => :new_episodes, :exclusive => true) do
191
+ proxied_user = @cf_client.unset_proxy_user()
192
+ cloud_info = @cf_client.cloud_info()
193
+ cloud_info[:user].should eql(@user)
194
+ end
195
+ end
196
+
197
+ it "should return true if user is logged in at target cloud" do
198
+ @cf_client.logged_in?.should be_true
199
+ @cf_client.user.should_not be_nil
200
+ @cf_client.user.should eql(@user)
201
+ @cf_client.auth_token.should_not be_nil
202
+ @cf_client.auth_token.should eql(@auth_token)
203
+ end
204
+ end
205
+
206
+ context "with an admin user logged in" do
207
+ before(:all) do
208
+ VCR.use_cassette("admin_logged/client", :record => :new_episodes) do
209
+ @cf_client = client_admin_logged()
210
+ end
211
+ end
212
+
213
+ use_vcr_cassette "admin_logged/users", :record => :new_episodes
214
+
215
+ it "should raise a BadParams exception when creating a user with a blank email" do
216
+ expect {
217
+ created = @cf_client.create_user("", "foobar")
218
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
219
+ end
220
+
221
+ it "should raise a BadParams exception when creating a user with a blank password" do
222
+ expect {
223
+ created = @cf_client.create_user("fakeuser@vcap.me", "")
224
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
225
+ end
226
+
227
+ it "should raise a BadRequest exception when creating a user that already exists at target cloud" do
228
+ expect {
229
+ created = @cf_client.create_user("user@vcap.me", "foobar")
230
+ }.to raise_exception(CloudFoundry::Client::Exception::BadRequest)
231
+ end
232
+
233
+ it "should return true if a new user is created at target cloud" do
234
+ VCR.use_cassette("admin_logged/users_create_action", :record => :new_episodes, :exclusive => true) do
235
+ created = @cf_client.create_user("fakeuser@vcap.me", "foobar")
236
+ created.should be_true
237
+ end
238
+ end
239
+
240
+ it "should get a proper list of users at target cloud" do
241
+ users = @cf_client.list_users()
242
+ users.should have_at_least(1).items
243
+ user_info = users.first
244
+ user_info.should have_key :email
245
+ user_info.should have_key :admin
246
+ user_info.should have_key :apps
247
+ end
248
+
249
+ it "should raise a BadParams exception when retrieving information about a user with a blank email" do
250
+ expect {
251
+ user_info = @cf_client.user_info("")
252
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
253
+ end
254
+
255
+ it "should raise a Forbidden exception when retrieving information about a user that does not exists at target cloud" do
256
+ expect {
257
+ user_info = @cf_client.user_info("nouser@vcap.me")
258
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
259
+ end
260
+
261
+ it "should properly get basic user information from target cloud" do
262
+ user_info = @cf_client.user_info("fakeuser@vcap.me")
263
+ user_info.should have_key :email
264
+ end
265
+
266
+ it "should raise a BadParams exception when updating a user with a blank email" do
267
+ expect {
268
+ created = @cf_client.update_user("", "foobar")
269
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
270
+ end
271
+
272
+ it "should raise a BadParams exception when updating a user with a blank password" do
273
+ expect {
274
+ created = @cf_client.update_user("fakeuser@vcap.me", "")
275
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
276
+ end
277
+
278
+ it "should raise a Forbidden exception when updating a user that does not exists at target cloud" do
279
+ expect {
280
+ updated = @cf_client.update_user("nouser@vcap.me", "foobar")
281
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
282
+ end
283
+
284
+ it "should return true if a user is updated at target cloud" do
285
+ updated = @cf_client.update_user("fakeuser@vcap.me", "foobar")
286
+ updated.should be_true
287
+ end
288
+
289
+ it "should raise a BadParams exception when deleting a user with a blank email" do
290
+ expect {
291
+ created = @cf_client.delete_user("")
292
+ }.to raise_exception(CloudFoundry::Client::Exception::BadParams)
293
+ end
294
+
295
+ it "should raise a Forbidden exception when deleting a user that does not exists at target cloud" do
296
+ expect {
297
+ deleted = @cf_client.delete_user("nouser@vcap.me")
298
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
299
+ end
300
+
301
+ it "should return true if a user is deleted at target cloud" do
302
+ deleted = @cf_client.delete_user("fakeuser@vcap.me")
303
+ deleted.should be_true
304
+ end
305
+
306
+ it "should return true if a user is deleted at target cloud" do
307
+ deleted = @cf_client.delete_user("fakeuser1@vcap.me")
308
+ deleted.should be_true
309
+ end
310
+
311
+ it "should return true if a user is deleted at target cloud" do
312
+ deleted = @cf_client.delete_user("fakeuser2@vcap.me")
313
+ deleted.should be_true
314
+ end
315
+
316
+ it "should allow to proxy a user" do
317
+ proxied_user = @cf_client.set_proxy_user("user@vcap.me")
318
+ proxied_user.should eql("user@vcap.me")
319
+ proxied_user.should eql(@cf_client.proxy_user)
320
+ end
321
+
322
+ it "should properly get proxy user account information from target cloud" do
323
+ VCR.use_cassette("admin_logged/users_proxy_action", :record => :new_episodes, :exclusive => true) do
324
+ proxied_user = @cf_client.set_proxy_user("user@vcap.me")
325
+ cloud_info = @cf_client.cloud_info()
326
+ cloud_info[:user].should eql("user@vcap.me")
327
+ cloud_info[:user].should eql(@cf_client.proxy_user)
328
+ end
329
+ end
330
+
331
+ it "should allow to proxy a user that does not exists at target cloud" do
332
+ proxied_user = @cf_client.set_proxy_user("nouser@vcap.me")
333
+ proxied_user.should eql("nouser@vcap.me")
334
+ proxied_user.should eql(@cf_client.proxy_user)
335
+ end
336
+
337
+ it "should raise a Forbidden exception when retrieving proxy user account information that does not exists at target cloud" do
338
+ VCR.use_cassette("admin_logged/users_proxy_nouser_action", :record => :new_episodes, :exclusive => true) do
339
+ expect {
340
+ proxied_user = @cf_client.set_proxy_user("nouser@vcap.me")
341
+ cloud_info = @cf_client.cloud_info()
342
+ }.to raise_exception(CloudFoundry::Client::Exception::Forbidden)
343
+ end
344
+ end
345
+
346
+ it "should allow to unproxy a user" do
347
+ proxied_user = @cf_client.unset_proxy_user()
348
+ proxied_user.should be_nil
349
+ @cf_client.proxy_user.should be_nil
350
+ end
351
+
352
+ it "should properly get current user account information from target cloud" do
353
+ VCR.use_cassette("admin_logged/users_unproxy_action", :record => :new_episodes, :exclusive => true) do
354
+ proxied_user = @cf_client.unset_proxy_user()
355
+ cloud_info = @cf_client.cloud_info()
356
+ cloud_info[:user].should eql(@user)
357
+ end
358
+ end
359
+
360
+ it "should return true if user is logged in at target cloud" do
361
+ @cf_client.logged_in?.should be_true
362
+ @cf_client.user.should_not be_nil
363
+ @cf_client.user.should eql(@user)
364
+ @cf_client.auth_token.should eql(@auth_token)
365
+ end
366
+ end
367
+ end