cf 5.2.1.rc3 → 5.2.1.rc4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +0 -6
- data/lib/admin/service_broker/add.rb +1 -1
- data/lib/admin/service_broker/remove.rb +1 -1
- data/lib/cf/cli/start/target_prettifier.rb +2 -2
- data/lib/cf/version.rb +1 -1
- data/lib/manifests/manifests.rb +0 -1
- data/spec/features/service_brokers_spec.rb +151 -0
- data/spec/spec_helper.rb +0 -6
- metadata +11 -59
- data/spec/integration/service_broker_spec.rb +0 -77
data/Rakefile
CHANGED
@@ -6,12 +6,6 @@ specfile, _ = Dir["*.gemspec"]
|
|
6
6
|
SPEC = Gem::Specification.load(specfile)
|
7
7
|
CURRENT_VERSION = SPEC.version.to_s.freeze
|
8
8
|
|
9
|
-
namespace :spec do
|
10
|
-
RSpec::Core::RakeTask.new(:ci) do |t|
|
11
|
-
t.rspec_opts = '-t ~type:integration'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
9
|
RSpec::Core::RakeTask.new(:spec)
|
16
10
|
task :default => :spec
|
17
11
|
|
@@ -18,7 +18,7 @@ module CFAdmin::ServiceBroker
|
|
18
18
|
broker = input[:name]
|
19
19
|
return unless input[:really, broker]
|
20
20
|
|
21
|
-
with_progress("Removing service broker #{broker.name}") do
|
21
|
+
with_progress("Removing service broker #{c(broker.name, :name)}") do
|
22
22
|
broker.delete!
|
23
23
|
end
|
24
24
|
end
|
data/lib/cf/version.rb
CHANGED
data/lib/manifests/manifests.rb
CHANGED
@@ -0,0 +1,151 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "sinatra"
|
3
|
+
|
4
|
+
class FakeCloudController < Sinatra::Base
|
5
|
+
@requests = []
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :requests
|
9
|
+
|
10
|
+
def last_request
|
11
|
+
requests.last
|
12
|
+
end
|
13
|
+
|
14
|
+
def reset
|
15
|
+
requests.clear
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
get '/v2/service_brokers' do
|
20
|
+
self.class.requests << request
|
21
|
+
|
22
|
+
broker_guid = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
|
23
|
+
body = {
|
24
|
+
'total_results' => 1,
|
25
|
+
'total_pages' => 1,
|
26
|
+
'prev_url' => nil,
|
27
|
+
'next_url' => nil,
|
28
|
+
'resources' => [{
|
29
|
+
'metadata' => {
|
30
|
+
'guid' => broker_guid,
|
31
|
+
'url' => "http://cc.example.com/v2/service_brokers/#{broker_guid}",
|
32
|
+
'created_at' => Time.now,
|
33
|
+
'updated_at' => Time.now,
|
34
|
+
},
|
35
|
+
'entity' => {
|
36
|
+
'name' => 'my-custom-service',
|
37
|
+
'broker_url' => 'http://broker.example.com/',
|
38
|
+
}
|
39
|
+
}]
|
40
|
+
}.to_json
|
41
|
+
[200, {}, body]
|
42
|
+
end
|
43
|
+
|
44
|
+
post '/v2/service_brokers' do
|
45
|
+
self.class.requests << request
|
46
|
+
|
47
|
+
body = {
|
48
|
+
metadata: {
|
49
|
+
guid: SecureRandom.uuid
|
50
|
+
}
|
51
|
+
}.to_json
|
52
|
+
|
53
|
+
[200, {}, body]
|
54
|
+
end
|
55
|
+
|
56
|
+
delete '/v2/service_brokers/:guid' do
|
57
|
+
self.class.requests << request
|
58
|
+
204
|
59
|
+
end
|
60
|
+
|
61
|
+
get '/responsive' do
|
62
|
+
200
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "Service Brokers" do
|
67
|
+
let(:broker_url) { 'http://broker.example.com/' }
|
68
|
+
let(:broker_token) { 'opensesame' }
|
69
|
+
let(:last_request) { FakeCloudController.last_request }
|
70
|
+
|
71
|
+
before do
|
72
|
+
thr = Thread.new do
|
73
|
+
Rack::Handler::WEBrick.run(FakeCloudController, :Port => 12345, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0))
|
74
|
+
end
|
75
|
+
|
76
|
+
def responsive?
|
77
|
+
begin
|
78
|
+
resp = Net::HTTP.start('localhost', 12345) { |http| http.get('/responsive') }
|
79
|
+
resp.is_a? Net::HTTPSuccess
|
80
|
+
rescue Errno::ECONNREFUSED
|
81
|
+
false
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
Timeout.timeout(60) { thr.join(0.1) until responsive? }
|
86
|
+
|
87
|
+
@homedir = File.join(File.dirname(__FILE__), '..', '..', 'tmp')
|
88
|
+
FileUtils.mkdir_p(File.join(@homedir, '.cf'))
|
89
|
+
|
90
|
+
# cf target
|
91
|
+
File.open(File.join(@homedir, '.cf', 'target'), 'w') do |f|
|
92
|
+
f.puts 'http://127.0.0.1:12345'
|
93
|
+
end
|
94
|
+
|
95
|
+
# cf login
|
96
|
+
File.open(File.join(@homedir, '.cf', 'tokens.yml'), 'w') do |f|
|
97
|
+
f.puts <<-YAML
|
98
|
+
http://127.0.0.1:8181:
|
99
|
+
:version: 2
|
100
|
+
:token: bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI0MGE0YWJlOS0yYTgxLTQyZGYtODVjNS1kNDdlMzRiOTA0YTEiLCJ1c2VyX2lkIjoiMzI5YmIzYmYtMWU3NS00MGQ3LThhMDItMjI3Y2FjY2IyZGU3Iiwic3ViIjoiMzI5YmIzYmYtMWU3NS00MGQ3LThhMDItMjI3Y2FjY2IyZGU3IiwidXNlcl9uYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluIiwic2NvcGUiOlsiY2xvdWRfY29udHJvbGxlci5hZG1pbiIsImNsb3VkX2NvbnRyb2xsZXIucmVhZCIsImNsb3VkX2NvbnRyb2xsZXIud3JpdGUiLCJvcGVuaWQiLCJwYXNzd29yZC53cml0ZSIsInNjaW0ucmVhZCIsInNjaW0ud3JpdGUiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImlhdCI6MTM3NjU5MzI3NiwiZXhwIjoxMzc2NjAwNDc2LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiYXVkIjpbInNjaW0iLCJvcGVuaWQiLCJjbG91ZF9jb250cm9sbGVyIiwicGFzc3dvcmQiXX0.VSPhFetKLDvZal8bOK38uTBbkrDD2_IdSjHqluk1WIY
|
101
|
+
:refresh_token: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1MzA3ZGJmNC1iMTE1LTQ0MzgtOWRkNi00ZGVlMDVkZjgwN2IiLCJzdWIiOiIzMjliYjNiZi0xZTc1LTQwZDctOGEwMi0yMjdjYWNjYjJkZTciLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImNsb3VkX2NvbnRyb2xsZXIuYWRtaW4iLCJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwib3BlbmlkIiwicGFzc3dvcmQud3JpdGUiLCJzY2ltLnJlYWQiLCJzY2ltLndyaXRlIl0sImlhdCI6MTM3NjU5MzI3NiwiZXhwIjoxMzc3ODAyODc2LCJjaWQiOiJjZiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJhdWQiOlsiY2xvdWRfY29udHJvbGxlci5hZG1pbiIsImNsb3VkX2NvbnRyb2xsZXIucmVhZCIsImNsb3VkX2NvbnRyb2xsZXIud3JpdGUiLCJvcGVuaWQiLCJwYXNzd29yZC53cml0ZSIsInNjaW0ucmVhZCIsInNjaW0ud3JpdGUiXX0.7wlsnXoBuE-jSYTBZboy1U26NWs4-VHBEYYGMLz5YFQ
|
102
|
+
:space: 671847d5-9754-49b2-bc9f-977ee42c7e4c
|
103
|
+
:organization: 57944537-4f45-424d-a8af-b41ab6b4f0a0
|
104
|
+
YAML
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
after do
|
109
|
+
crash_log = File.join(@homedir, '.cf', 'crash')
|
110
|
+
if File.exists?(crash_log)
|
111
|
+
puts `cat #{crash_log}`
|
112
|
+
FileUtils.rm(crash_log)
|
113
|
+
end
|
114
|
+
|
115
|
+
FakeCloudController.reset
|
116
|
+
end
|
117
|
+
|
118
|
+
it "allows an admin user to add a service broker" do
|
119
|
+
BlueShell::Runner.run("env HOME=#{@homedir} #{cf_bin} add-service-broker --name my-custom-service --url #{broker_url} --token #{broker_token}") do |runner|
|
120
|
+
expect(runner).to say "Adding service broker my-custom-service... OK"
|
121
|
+
end
|
122
|
+
|
123
|
+
expect(last_request).to be_post
|
124
|
+
expect(last_request.path).to eq('/v2/service_brokers')
|
125
|
+
expect(JSON.load(last_request.body)).to eq(
|
126
|
+
'name' => 'my-custom-service',
|
127
|
+
'broker_url' => broker_url,
|
128
|
+
'token' => broker_token
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "allows an admin user to list service brokers" do
|
133
|
+
BlueShell::Runner.run("env HOME=#{@homedir} #{cf_bin} service-brokers") do |runner|
|
134
|
+
expect(runner).to say /my-custom-service.*#{broker_url}/
|
135
|
+
end
|
136
|
+
|
137
|
+
expect(last_request).to be_get
|
138
|
+
expect(last_request.path).to eq('/v2/service_brokers')
|
139
|
+
end
|
140
|
+
|
141
|
+
it "allows an admin user to remove a service broker" do
|
142
|
+
BlueShell::Runner.run("env HOME=#{@homedir} #{cf_bin} remove-service-broker my-custom-service") do |runner|
|
143
|
+
expect(runner).to say "Really remove my-custom-service?> n"
|
144
|
+
runner.send_keys("y")
|
145
|
+
expect(runner).to say "Removing service broker my-custom-service... OK"
|
146
|
+
end
|
147
|
+
|
148
|
+
expect(last_request).to be_delete
|
149
|
+
expect(last_request.path).to eq('/v2/service_brokers/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa')
|
150
|
+
end
|
151
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -10,7 +10,6 @@ require "webmock/rspec"
|
|
10
10
|
require "ostruct"
|
11
11
|
require "fakefs/safe"
|
12
12
|
require "blue-shell"
|
13
|
-
require_relative '../vendor/integration-test-support/support/integration_example_group.rb'
|
14
13
|
|
15
14
|
TRAVIS_BUILD_ID = ENV["TRAVIS_BUILD_ID"]
|
16
15
|
|
@@ -30,10 +29,6 @@ Dir[File.expand_path('../support/**/*.rb', __FILE__)].each do |file|
|
|
30
29
|
require file
|
31
30
|
end
|
32
31
|
|
33
|
-
tmp_dir = File.expand_path('../tmp', File.dirname(__FILE__))
|
34
|
-
FileUtils.mkdir_p(tmp_dir)
|
35
|
-
IntegrationExampleGroup.tmp_dir = tmp_dir
|
36
|
-
|
37
32
|
RSpec.configure do |c|
|
38
33
|
c.include BlueShell::Matchers
|
39
34
|
|
@@ -46,7 +41,6 @@ RSpec.configure do |c|
|
|
46
41
|
c.include InteractHelper
|
47
42
|
c.include ConfigHelper
|
48
43
|
c.include FeaturesHelper
|
49
|
-
c.include IntegrationExampleGroup, type: :integration, :example_group => {:file_path => /\/integration\//}
|
50
44
|
|
51
45
|
c.before(:all) do
|
52
46
|
WebMock.disable_net_connect!(:allow_localhost => true)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.2.1.
|
4
|
+
version: 5.2.1.rc4
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-08-
|
13
|
+
date: 2013-08-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -307,55 +307,7 @@ dependencies:
|
|
307
307
|
- !ruby/object:Gem::Version
|
308
308
|
version: 0.2.4
|
309
309
|
- !ruby/object:Gem::Dependency
|
310
|
-
name:
|
311
|
-
requirement: !ruby/object:Gem::Requirement
|
312
|
-
none: false
|
313
|
-
requirements:
|
314
|
-
- - ~>
|
315
|
-
- !ruby/object:Gem::Version
|
316
|
-
version: '1.9'
|
317
|
-
type: :development
|
318
|
-
prerelease: false
|
319
|
-
version_requirements: !ruby/object:Gem::Requirement
|
320
|
-
none: false
|
321
|
-
requirements:
|
322
|
-
- - ~>
|
323
|
-
- !ruby/object:Gem::Version
|
324
|
-
version: '1.9'
|
325
|
-
- !ruby/object:Gem::Dependency
|
326
|
-
name: httpclient
|
327
|
-
requirement: !ruby/object:Gem::Requirement
|
328
|
-
none: false
|
329
|
-
requirements:
|
330
|
-
- - ~>
|
331
|
-
- !ruby/object:Gem::Version
|
332
|
-
version: '2.3'
|
333
|
-
type: :development
|
334
|
-
prerelease: false
|
335
|
-
version_requirements: !ruby/object:Gem::Requirement
|
336
|
-
none: false
|
337
|
-
requirements:
|
338
|
-
- - ~>
|
339
|
-
- !ruby/object:Gem::Version
|
340
|
-
version: '2.3'
|
341
|
-
- !ruby/object:Gem::Dependency
|
342
|
-
name: yajl-ruby
|
343
|
-
requirement: !ruby/object:Gem::Requirement
|
344
|
-
none: false
|
345
|
-
requirements:
|
346
|
-
- - ! '>='
|
347
|
-
- !ruby/object:Gem::Version
|
348
|
-
version: '0'
|
349
|
-
type: :development
|
350
|
-
prerelease: false
|
351
|
-
version_requirements: !ruby/object:Gem::Requirement
|
352
|
-
none: false
|
353
|
-
requirements:
|
354
|
-
- - ! '>='
|
355
|
-
- !ruby/object:Gem::Version
|
356
|
-
version: '0'
|
357
|
-
- !ruby/object:Gem::Dependency
|
358
|
-
name: nats
|
310
|
+
name: sinatra
|
359
311
|
requirement: !ruby/object:Gem::Requirement
|
360
312
|
none: false
|
361
313
|
requirements:
|
@@ -371,21 +323,21 @@ dependencies:
|
|
371
323
|
- !ruby/object:Gem::Version
|
372
324
|
version: '0'
|
373
325
|
- !ruby/object:Gem::Dependency
|
374
|
-
name:
|
326
|
+
name: webmock
|
375
327
|
requirement: !ruby/object:Gem::Requirement
|
376
328
|
none: false
|
377
329
|
requirements:
|
378
|
-
- -
|
330
|
+
- - ~>
|
379
331
|
- !ruby/object:Gem::Version
|
380
|
-
version: '
|
332
|
+
version: '1.9'
|
381
333
|
type: :development
|
382
334
|
prerelease: false
|
383
335
|
version_requirements: !ruby/object:Gem::Requirement
|
384
336
|
none: false
|
385
337
|
requirements:
|
386
|
-
- -
|
338
|
+
- - ~>
|
387
339
|
- !ruby/object:Gem::Version
|
388
|
-
version: '
|
340
|
+
version: '1.9'
|
389
341
|
description:
|
390
342
|
email:
|
391
343
|
- vcap-dev@googlegroups.com
|
@@ -656,10 +608,10 @@ files:
|
|
656
608
|
- spec/features/manifests_spec.rb
|
657
609
|
- spec/features/org_spec.rb
|
658
610
|
- spec/features/push_flow_spec.rb
|
611
|
+
- spec/features/service_brokers_spec.rb
|
659
612
|
- spec/features/services_spec.rb
|
660
613
|
- spec/features/space_spec.rb
|
661
614
|
- spec/features/switching_targets_spec.rb
|
662
|
-
- spec/integration/service_broker_spec.rb
|
663
615
|
- spec/manifests/errors_spec.rb
|
664
616
|
- spec/manifests/loader/builder_spec.rb
|
665
617
|
- spec/manifests/loader/normalizer_spec.rb
|
@@ -694,7 +646,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
694
646
|
version: '0'
|
695
647
|
segments:
|
696
648
|
- 0
|
697
|
-
hash: -
|
649
|
+
hash: -2008180272161412010
|
698
650
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
699
651
|
none: false
|
700
652
|
requirements:
|
@@ -850,10 +802,10 @@ test_files:
|
|
850
802
|
- spec/features/manifests_spec.rb
|
851
803
|
- spec/features/org_spec.rb
|
852
804
|
- spec/features/push_flow_spec.rb
|
805
|
+
- spec/features/service_brokers_spec.rb
|
853
806
|
- spec/features/services_spec.rb
|
854
807
|
- spec/features/space_spec.rb
|
855
808
|
- spec/features/switching_targets_spec.rb
|
856
|
-
- spec/integration/service_broker_spec.rb
|
857
809
|
- spec/manifests/errors_spec.rb
|
858
810
|
- spec/manifests/loader/builder_spec.rb
|
859
811
|
- spec/manifests/loader/normalizer_spec.rb
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "Service Broker Management", components: [:nats, :uaa, :ccng, :fake_service_broker] do
|
4
|
-
let(:username) { 'admin' }
|
5
|
-
let(:password) { 'the_admin_pw' }
|
6
|
-
let(:target) { 'http://127.0.0.1:8181' }
|
7
|
-
|
8
|
-
let(:broker_url) { 'http://127.0.0.1:54329' }
|
9
|
-
let(:broker_token) { 'opensesame' }
|
10
|
-
|
11
|
-
before do
|
12
|
-
create_user_in_ccng
|
13
|
-
logout
|
14
|
-
|
15
|
-
BlueShell::Runner.run("#{cf_bin} target #{target}") do |runner|
|
16
|
-
runner.wait_for_exit
|
17
|
-
expect(runner).to be_successful
|
18
|
-
end
|
19
|
-
|
20
|
-
BlueShell::Runner.run("#{cf_bin} login #{username} --password #{password}") do |runner|
|
21
|
-
expect(runner).to say "Authenticating... OK"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
after do
|
26
|
-
logout
|
27
|
-
end
|
28
|
-
|
29
|
-
it "allows an admin user to add a service broker" do
|
30
|
-
BlueShell::Runner.run("#{cf_bin} add-service-broker --name my-custom-service --url #{broker_url} --token #{broker_token}") do |runner|
|
31
|
-
expect(runner).to say "Adding service broker my-custom-service... OK"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "with a service broker already registered" do
|
36
|
-
before do
|
37
|
-
BlueShell::Runner.run("#{cf_bin} add-service-broker --name my-custom-service --url #{broker_url} --token #{broker_token}") do |runner|
|
38
|
-
expect(runner).to say "Adding service broker my-custom-service... OK"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
it "allows an admin user to list service brokers" do
|
43
|
-
BlueShell::Runner.run("#{cf_bin} service-brokers") do |runner|
|
44
|
-
expect(runner).to say /my-custom-service.*#{broker_url}/
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it "allows an admin user to remove a service broker" do
|
49
|
-
BlueShell::Runner.run("#{cf_bin} remove-service-broker my-custom-service") do |runner|
|
50
|
-
expect(runner).to say "Really remove my-custom-service?> n"
|
51
|
-
runner.send_keys("y")
|
52
|
-
expect(runner).to say "Removing service broker my-custom-service... OK"
|
53
|
-
end
|
54
|
-
|
55
|
-
BlueShell::Runner.run("#{cf_bin} service-brokers") do |runner|
|
56
|
-
expect(runner).to_not say /my-custom-service/
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def create_user_in_ccng
|
62
|
-
ccng_post "/v2/users", {
|
63
|
-
guid: user_guid
|
64
|
-
}
|
65
|
-
end
|
66
|
-
|
67
|
-
def user_guid
|
68
|
-
uaa_port = component!(:uaa).port
|
69
|
-
token_issuer = CF::UAA::TokenIssuer.new("http://localhost:#{uaa_port}", 'cf')
|
70
|
-
auth_header = token_issuer.owner_password_grant(username, password).auth_header
|
71
|
-
response = Typhoeus::Request.new(
|
72
|
-
"http://localhost:#{uaa_port}/Users?filter=userName+eq+'#{username}'",
|
73
|
-
headers: {'Authorization' => auth_header}
|
74
|
-
).run
|
75
|
-
JSON.parse(response.body).fetch("resources").first.fetch('id')
|
76
|
-
end
|
77
|
-
end
|