cfoundry 2.3.5 → 2.3.6.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -48,8 +48,7 @@ module CFoundry
48
48
  attr_reader :target
49
49
 
50
50
  attr_accessor :trace, :backtrace, :log,
51
- :request_id, :token, :target,
52
- :http_proxy, :https_proxy
51
+ :request_id, :token, :http_proxy, :https_proxy
53
52
 
54
53
  def initialize(target, token = nil)
55
54
  @target = target
@@ -59,6 +58,13 @@ module CFoundry
59
58
  @log = false
60
59
  end
61
60
 
61
+ def target=(target)
62
+ return if target == @target
63
+
64
+ @target = target
65
+ @token = nil
66
+ end
67
+
62
68
  def request(method, path, options = {})
63
69
  request_uri(method, construct_url(path), DEFAULT_OPTIONS.merge(options))
64
70
  end
@@ -3,6 +3,7 @@ require "multi_json"
3
3
 
4
4
  module CFoundry
5
5
  module TraceHelpers
6
+ PROTECTED_ATTRIBUTES = ['Authorization']
6
7
 
7
8
  def request_trace(request)
8
9
  return nil unless request
@@ -33,7 +34,11 @@ module CFoundry
33
34
 
34
35
  def header_trace(headers)
35
36
  headers.sort.map do |key, value|
36
- " #{key} : #{value}"
37
+ unless PROTECTED_ATTRIBUTES.include?(key)
38
+ " #{key} : #{value}"
39
+ else
40
+ " #{key} : [PRIVATE DATA HIDDEN]"
41
+ end
37
42
  end
38
43
  end
39
44
  end
@@ -18,7 +18,7 @@ module CFoundry::V2
18
18
  # [Space] Currently targeted space.
19
19
  attr_accessor :current_space
20
20
 
21
- def_delegators :@base, :target, :token, :token=, :http_proxy, :http_proxy=,
21
+ def_delegators :@base, :target, :target=, :token, :token=, :http_proxy, :http_proxy=,
22
22
  :https_proxy, :https_proxy=, :trace, :trace=, :log, :log=, :info
23
23
 
24
24
  # Create a new Client for interfacing with the given target.
@@ -1,4 +1,4 @@
1
1
  module CFoundry # :nodoc:
2
2
  # CFoundry library version number.
3
- VERSION = "2.3.5".freeze
3
+ VERSION = "2.3.6.rc1".freeze
4
4
  end
@@ -80,7 +80,7 @@ describe CFoundry::BaseClient do
80
80
  end
81
81
 
82
82
  describe "#refresh_token!" do
83
- let(:uaa) { stub }
83
+ let(:uaa) { double }
84
84
  let(:access_token) { Base64.encode64(%Q|{"algo": "h1234"}{"a":"b"}random-bytes|) }
85
85
  let(:refresh_token) { "xyz" }
86
86
  let(:new_access_token) { Base64.encode64(%Q|{"algo": "h1234"}{"a":"x"}random-bytes|) }
@@ -254,4 +254,17 @@ describe CFoundry::BaseClient do
254
254
  }.to raise_error(CFoundry::BadResponse, /result/)
255
255
  end
256
256
  end
257
+
258
+ describe "#target=" do
259
+ let(:base_client) { CFoundry::BaseClient.new }
260
+ let(:new_target) { "some-target-url.com"}
261
+
262
+ it "sets a new target" do
263
+ expect{base_client.target = new_target}.to change {base_client.target}.from("https://api.cloudfoundry.com").to(new_target)
264
+ end
265
+
266
+ it "sets a new target on the rest client" do
267
+ expect{base_client.target = new_target}.to change{base_client.rest_client.target}.from("https://api.cloudfoundry.com").to(new_target)
268
+ end
269
+ end
257
270
  end
@@ -368,4 +368,18 @@ describe CFoundry::RestClient do
368
368
  end
369
369
  end
370
370
  end
371
+
372
+ describe "#target=" do
373
+ let(:token) { "some-token" }
374
+
375
+ it "invalidates the token if the target has changed" do
376
+ rest_client.target = "http://some-target.com"
377
+ expect(rest_client.token).to be_nil
378
+ end
379
+
380
+ it "does not invalidate the token if the target has not changed" do
381
+ rest_client.target = target
382
+ expect(rest_client.token).to eq token
383
+ end
384
+ end
371
385
  end
@@ -47,6 +47,18 @@ describe CFoundry::TraceHelpers do
47
47
  it "returns nil if request is nil" do
48
48
  tracehelper_test_class.new.request_trace(nil).should == nil
49
49
  end
50
+
51
+ context "with protected attributes" do
52
+ let(:header_trace) { "REQUEST_HEADERS:\n Authorization : [PRIVATE DATA HIDDEN]" }
53
+ let(:request) do
54
+ {
55
+ :method => "GET",
56
+ :url => "http://api.cloudfoundry.com/foo",
57
+ :headers => { 'Authorization' => "SECRET STUFF" }
58
+ }
59
+ end
60
+ include_examples "request_trace tests"
61
+ end
50
62
  end
51
63
 
52
64
 
@@ -60,16 +60,28 @@ module CFoundry
60
60
  end
61
61
 
62
62
  describe "#login" do
63
- include_examples "client login" do
64
- it 'sets the current organization to nil' do
65
- client.current_organization = "org"
66
- expect { subject }.to change { client.current_organization }.from("org").to(nil)
67
- end
63
+ include_examples "client login"
68
64
 
69
- it 'sets the current space to nil' do
70
- client.current_space = "space"
71
- expect { subject }.to change { client.current_space }.from("space").to(nil)
72
- end
65
+ it 'sets the current organization to nil' do
66
+ client.current_organization = "org"
67
+ expect { subject }.to change { client.current_organization }.from("org").to(nil)
68
+ end
69
+
70
+ it 'sets the current space to nil' do
71
+ client.current_space = "space"
72
+ expect { subject }.to change { client.current_space }.from("space").to(nil)
73
+ end
74
+ end
75
+
76
+ describe "#target=" do
77
+ let(:new_target) { "some-target-url.com"}
78
+
79
+ it "sets a new target" do
80
+ expect{client.target = new_target}.to change {client.target}.from("http://api.cloudfoundry.com").to(new_target)
81
+ end
82
+
83
+ it "sets a new target on the base client" do
84
+ expect{client.target = new_target}.to change{client.base.target}.from("http://api.cloudfoundry.com").to(new_target)
73
85
  end
74
86
  end
75
87
  end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+
3
+ describe CFoundry::V2::Client do
4
+ before do
5
+ WebMock.allow_net_connect!
6
+ end
7
+
8
+ let(:a1_domain) { "a1.cf-app.com" }
9
+ let(:prod_domain) { "run.pivotal.io" }
10
+
11
+ describe "setting a new target" do
12
+ it "switches the target cc" do
13
+ client = CFoundry::V2::Client.new("http://api." + a1_domain)
14
+ auth_endpoint = client.info[:authorization_endpoint]
15
+ expect(auth_endpoint).to match a1_domain
16
+
17
+ client.target = "http://api." + prod_domain
18
+ auth_endpoint = client.info[:authorization_endpoint]
19
+ expect(auth_endpoint).to match prod_domain
20
+ end
21
+
22
+ if ENV["CF_V2_RUN_INTEGRATION"]
23
+ it "requires a re-login" do
24
+ client = CFoundry::V2::Client.new("http://api." + a1_domain)
25
+ client.login(ENV["CF_V2_TEST_USER"], ENV["CF_V2_TEST_PASSWORD"])
26
+ client.quota_definitions # Getting quota definitions will always be the shortest request that requires auth
27
+
28
+ client.target = nil
29
+ client.target = "http://api." + a1_domain
30
+ expect { client.quota_definitions }.to raise_error(CFoundry::InvalidAuthToken)
31
+
32
+ client.login(ENV["CF_V2_TEST_USER"], ENV["CF_V2_TEST_PASSWORD"])
33
+ client.quota_definitions
34
+ end
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfoundry
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.5
5
- prerelease:
4
+ version: 2.3.6.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Cloud Foundry Team
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-07-08 00:00:00.000000000 Z
13
+ date: 2013-07-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
@@ -395,6 +395,7 @@ files:
395
395
  - spec/fixtures/fake_cc_user.json
396
396
  - spec/fixtures/fake_cc_user_organizations.json
397
397
  - spec/fixtures/fake_cc_user_with_managers.json
398
+ - spec/integration/client_spec.rb
398
399
  - spec/spec_helper.rb
399
400
  - spec/support/factory_girl.rb
400
401
  - spec/support/shared_examples/cc_api_stub_request_examples.rb
@@ -415,16 +416,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
415
416
  version: '0'
416
417
  segments:
417
418
  - 0
418
- hash: -3146471824032498517
419
+ hash: -59622661081407862
419
420
  required_rubygems_version: !ruby/object:Gem::Requirement
420
421
  none: false
421
422
  requirements:
422
- - - ! '>='
423
+ - - ! '>'
423
424
  - !ruby/object:Gem::Version
424
- version: '0'
425
- segments:
426
- - 0
427
- hash: -3146471824032498517
425
+ version: 1.3.1
428
426
  requirements: []
429
427
  rubyforge_project: cfoundry
430
428
  rubygems_version: 1.8.25
@@ -524,6 +522,7 @@ test_files:
524
522
  - spec/fixtures/fake_cc_user.json
525
523
  - spec/fixtures/fake_cc_user_organizations.json
526
524
  - spec/fixtures/fake_cc_user_with_managers.json
525
+ - spec/integration/client_spec.rb
527
526
  - spec/spec_helper.rb
528
527
  - spec/support/factory_girl.rb
529
528
  - spec/support/shared_examples/cc_api_stub_request_examples.rb