misty 0.6.0 → 0.6.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f77fca7e84ccf06eb7cf92b3c2ee1a9233d0427
4
- data.tar.gz: d8d73c45718a708d0da3f5bf076aa0cc802c0f4c
3
+ metadata.gz: 199084962ac01539f791b1d9c2f825250dac494d
4
+ data.tar.gz: b83a3c147b00475928747f9ad234667cb93f92fe
5
5
  SHA512:
6
- metadata.gz: 5a98bcc69158a796d55ee9ce9ba7ccb5cc6d6f99bc0fc9217137e00905a243cc1608aea11dd9dc996423dcfdc9c2ad25a1435bc17cbbe66cfc03c1c9e491ed78
7
- data.tar.gz: 72475d27ad43c025522654ce010b520a837cfd70c403ae8ac70b632300ab7c900e03eda7f860d2fe53b095ce6324e3438304143e9957ff4866ee8c7849b68b84
6
+ metadata.gz: a46ae9b346bf59365903f900602ffda726ea82f7d699621a2009909287306398f09a6577d0413e48449510aa50a8ef437088747110eda7b4d7aca5c57e0d22a6
7
+ data.tar.gz: 5d344630bc6c7fb6a857cf0c0aa429a610345c3deb633ac41dc7c73315c5bcae566b1296d34f25a7fc9ec42ee0c3e8001bc5da178145fc640141ab25612bcc85
@@ -17,20 +17,20 @@ module Misty
17
17
  attr_reader :catalog
18
18
 
19
19
  def self.factory(auth, config)
20
+ raise URLError, "No URL provided" unless auth[:url] && !auth[:url].empty?
21
+ http = Misty::HTTP::NetHTTP.net_http(URI.parse(auth[:url]), config.ssl_verify_mode, config.log)
22
+
20
23
  if auth[:tenant_id] || auth[:tenant]
21
- return Misty::AuthV2.new(auth, config)
24
+ return Misty::AuthV2.new(auth, http)
22
25
  else
23
- return Misty::AuthV3.new(auth, config)
26
+ return Misty::AuthV3.new(auth, http)
24
27
  end
25
28
  end
26
29
 
27
- def initialize(auth, config)
28
- raise URLError, "No URL provided" unless auth[:url] && !auth[:url].empty?
30
+ def initialize(auth, http)
31
+ @http = http
29
32
  @credentials = set_credentials(auth)
30
- @http = net_http(URI.parse(auth[:url]), config.ssl_verify_mode, config.log)
31
- @token = nil
32
33
  @token, @catalog, @expires = set(authenticate)
33
- raise CatalogError, "No catalog provided during authentication" if @catalog.empty?
34
34
  end
35
35
 
36
36
  def authenticate
@@ -15,35 +15,29 @@ module Misty
15
15
  end
16
16
 
17
17
  def credentials
18
- raise Misty::Auth::CredentialsError, "#{self.class}: User name is required" if @user.name.nil?
19
- raise Misty::Auth::CredentialsError, "#{self.class}: User password is required" if @user.password.nil?
20
- return creds_by_id if @tenant.id
21
- return creds_by_name if @tenant.name
22
- raise Misty::Auth::CredentialsError, "#{self.class}: No tenant available"
23
- end
18
+ if @token
19
+ identity = { "token": { "id": @token } }
20
+ else
21
+ raise Misty::Auth::CredentialsError, "#{self.class}: User name is required" if @user.name.nil?
22
+ raise Misty::Auth::CredentialsError, "#{self.class}: User password is required" if @user.password.nil?
23
+ identity = { "passwordCredentials": user_credentials }
24
+ end
24
25
 
25
- def credentials_data
26
- {
27
- "username": @user.name,
28
- "password": @user.password
29
- }
30
- end
26
+ if @tenant.id
27
+ identity.merge!("tenantId": @tenant.id)
28
+ elsif @tenant.name
29
+ identity.merge!("tenantName": @tenant.name)
30
+ else
31
+ raise Misty::Auth::CredentialsError, "#{self.class}: No tenant available"
32
+ end
31
33
 
32
- def creds_by_name
33
- {
34
- "auth": {
35
- "passwordCredentials": credentials_data,
36
- "tenantName": @tenant.name
37
- }
38
- }
34
+ { "auth": identity }
39
35
  end
40
36
 
41
- def creds_by_id
37
+ def user_credentials
42
38
  {
43
- "auth": {
44
- "passwordCredentials": credentials_data,
45
- "tenantId": @tenant.id
46
- }
39
+ "username": @user.name,
40
+ "password": @user.password
47
41
  }
48
42
  end
49
43
 
@@ -62,8 +56,13 @@ module Misty
62
56
  end
63
57
 
64
58
  def set_credentials(auth)
65
- @user = Misty::Auth::User.new(auth[:user_id], auth[:user])
66
- @user.password = auth[:password]
59
+ if auth[:token]
60
+ @token = auth[:token]
61
+ else
62
+ @user = Misty::Auth::User.new(auth[:user_id], auth[:user])
63
+ @user.password = auth[:password]
64
+ end
65
+
67
66
  @tenant = Misty::Auth::Name.new(auth[:tenant_id], auth[:tenant])
68
67
  credentials
69
68
  end
@@ -62,8 +62,12 @@ module Misty
62
62
  @project.domain = Misty::Auth::Name.new(project_domain_id, auth[:user_domain])
63
63
  else
64
64
  # scope: domain
65
- domain_id = auth[:domain_id] ? auth[:domain_id] : Misty::DOMAIN_ID
66
- @domain = Misty::Auth::DomainScope.new(domain_id, auth[:domain]) if domain_id || auth[:domain]
65
+ if auth[:domain_id] || auth[:domain]
66
+ @domain = Misty::Auth::DomainScope.new(auth[:domain_id], auth[:domain])
67
+ else
68
+ # Use default Domain
69
+ @domain = Misty::Auth::DomainScope.new(Misty::DOMAIN_ID, nil)
70
+ end
67
71
  end
68
72
 
69
73
  if auth[:token]
@@ -54,7 +54,7 @@ module Misty
54
54
  @uri = URI.parse(@auth.get_endpoint(@options.service_names, @options.region_id, @options.interface))
55
55
  @base_path = @options.base_path ? @options.base_path : @uri.path
56
56
  @base_path = @base_path.chomp("/")
57
- @http = net_http(@uri, @options.ssl_verify_mode, @config.log)
57
+ @http = Misty::HTTP::NetHTTP.net_http(@uri, @options.ssl_verify_mode, @config.log)
58
58
  @version = nil
59
59
  @microversion = false
60
60
  end
@@ -1,7 +1,7 @@
1
1
  module Misty
2
2
  module HTTP
3
3
  module NetHTTP
4
- def net_http(endpoint, ssl_verify_mode, log)
4
+ def self.net_http(endpoint, ssl_verify_mode, log)
5
5
  http = Net::HTTP.new(endpoint.host, endpoint.port)
6
6
  http.set_debug_output(log) if log.level == Logger::DEBUG
7
7
  if endpoint.scheme == "https"
@@ -14,6 +14,10 @@ module Misty
14
14
  @options = val
15
15
  end
16
16
 
17
+ def to_s
18
+ "#{name}: #{project}: #{versions}"
19
+ end
20
+
17
21
  def version=(val)
18
22
  if @versions.include?(val)
19
23
  @version = val
@@ -22,10 +26,6 @@ module Misty
22
26
  @version = versions.sort[-1]
23
27
  end
24
28
  end
25
-
26
- def to_s
27
- "#{name}: #{project} => #{versions}"
28
- end
29
29
  end
30
30
 
31
31
  include Enumerable
@@ -45,5 +45,13 @@ module Misty
45
45
  yield service
46
46
  end
47
47
  end
48
+
49
+ def to_s
50
+ list = ""
51
+ @services.each do |service|
52
+ list << service.to_s + "\n"
53
+ end
54
+ list
55
+ end
48
56
  end
49
57
  end
@@ -1,3 +1,3 @@
1
1
  module Misty
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -2,77 +2,154 @@ require 'test_helper'
2
2
  require 'auth_helper'
3
3
 
4
4
  describe Misty::Auth do
5
- let(:config) do
6
- config = Misty::Cloud::Config.new
7
- config.log = Logger.new('/dev/null')
8
- config.ssl_verify_mode = false
9
- config
5
+ let(:http) do
6
+ endpoint = URI.parse("http://localhost:5000")
7
+ Net::HTTP.new(endpoint.host, endpoint.port)
10
8
  end
11
9
 
12
10
  describe Misty::AuthV3 do
13
11
  describe "#new" do
14
- it "authenticates with password using project scoped authorization" do
15
- auth = {
16
- :url => "http://localhost:5000",
17
- :user_id => "user_id",
18
- :password => "secret",
19
- :project_id => "project_id"
20
- }
21
-
12
+ it "fails when missing credentials" do
22
13
  stub_request(:post, "http://localhost:5000/v3/auth/tokens").
23
- with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}",
24
- :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'}).
25
- to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
14
+ to_return(:status => 200, :body => "{\"token\":{\"catalog\":[]}}", :headers => {"x-subject-token"=>"token_data"})
26
15
 
27
- Misty::AuthV3.new(auth, config)
16
+ proc do
17
+ Misty::AuthV3.new({}, http)
18
+ end.must_raise Misty::Auth::CredentialsError
28
19
  end
29
20
 
30
- it "authenticates with password using domain scoped authorization" do
31
- auth = {
32
- :url => "http://localhost:5000",
33
- :user_id => "user_id",
34
- :password => "secret"
35
- }
21
+ describe "using the password method" do
22
+ describe "with a project scope" do
23
+ it "authenticates using a project id" do
24
+ auth = {
25
+ :url => "http://localhost:5000",
26
+ :user_id => "user_id",
27
+ :password => "secret",
28
+ :project_id => "project_id"
29
+ }
36
30
 
37
- stub_request(:post, "http://localhost:5000/v3/auth/tokens").
38
- with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"id\":\"default\"}}}}",
39
- :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'}).
40
- to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
31
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
32
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}").
33
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
41
34
 
42
- Misty::AuthV3.new(auth, config)
43
- end
35
+ Misty::AuthV3.new(auth, http)
36
+ end
44
37
 
45
- it "authenticates with token using project scoped authorization" do
46
- auth = {
47
- :url => "http://localhost:5000",
48
- :token => "exampletoken",
49
- :project_id => "project_id"
50
- }
38
+ it "authenticates using a project name and a project domain id" do
39
+ auth = {
40
+ :url => "http://localhost:5000",
41
+ :user_id => "user_id",
42
+ :password => "secret",
43
+ :project => "project",
44
+ :project_domain_id => "domain_id"
45
+ }
51
46
 
52
- stub_request(:post, "http://localhost:5000/v3/auth/tokens").
53
- with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"exampletoken\"}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}",
54
- :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'}).
55
- to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
47
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
48
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"id\":\"domain_id\"}}}}}").
49
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
50
+
51
+ Misty::AuthV3.new(auth, http)
52
+ end
53
+ end
54
+
55
+ describe "with a domain scope" do
56
+ it "authenticates using a domain id" do
57
+ auth = {
58
+ :url => "http://localhost:5000",
59
+ :user_id => "user_id",
60
+ :password => "secret",
61
+ :domain_id => "domain_id"
62
+ }
63
+
64
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
65
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"id\":\"domain_id\"}}}}").
66
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
56
67
 
57
- Misty::AuthV3.new(auth, config)
68
+ Misty::AuthV3.new(auth, http)
69
+ end
70
+
71
+ it "authenticates using a domain name" do
72
+ auth = {
73
+ :url => "http://localhost:5000",
74
+ :user_id => "user_id",
75
+ :password => "secret",
76
+ :domain => "domain"
77
+ }
78
+
79
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
80
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"name\":\"domain\"}}}}").
81
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
82
+
83
+ Misty::AuthV3.new(auth, http)
84
+ end
85
+ end
58
86
  end
59
87
 
60
- it "authenticates with token using domain scoped authorization" do
61
- auth = {
62
- :url => "http://localhost:5000",
63
- :token => "exampletoken",
64
- }
88
+ describe "using the token method" do
89
+ describe "with a project scope" do
90
+ it "authenticates using a project id" do
91
+ auth = {
92
+ :url => "http://localhost:5000",
93
+ :token => "token",
94
+ :project_id => "project_id"
95
+ }
65
96
 
66
- stub_request(:post, "http://localhost:5000/v3/auth/tokens").
67
- with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"exampletoken\"}},\"scope\":{\"domain\":{\"id\":\"default\"}}}}",
68
- :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'}).
69
- to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
97
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
98
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}").
99
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
100
+
101
+ Misty::AuthV3.new(auth, http)
102
+ end
103
+
104
+ it "authenticates using a project name and a project domain id" do
105
+ auth = {
106
+ :url => "http://localhost:5000",
107
+ :token => "token",
108
+ :project => "project",
109
+ :project_domain_id => "domain_id"
110
+ }
111
+
112
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
113
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"id\":\"domain_id\"}}}}}").
114
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
115
+
116
+ Misty::AuthV3.new(auth, http)
117
+ end
118
+ end
119
+
120
+ describe "with a domain scope" do
121
+ it "authenticates using a domain id" do
122
+ auth = {
123
+ :url => "http://localhost:5000",
124
+ :token => "token",
125
+ :domain_id => "domain_id"
126
+ }
127
+
128
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
129
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"domain\":{\"id\":\"domain_id\"}}}}").
130
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
70
131
 
71
- Misty::AuthV3.new(auth, config)
132
+ Misty::AuthV3.new(auth, http)
133
+ end
134
+
135
+ it "authenticates using a domain name" do
136
+ auth = {
137
+ :url => "http://localhost:5000",
138
+ :token => "token",
139
+ :domain => "domain"
140
+ }
141
+
142
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
143
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"domain\":{\"name\":\"domain\"}}}}").
144
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
145
+
146
+ Misty::AuthV3.new(auth, http)
147
+ end
148
+ end
72
149
  end
73
150
  end
74
151
 
75
- describe "with credentials" do
152
+ describe "when authenticated" do
76
153
  let(:authv3_creds) do
77
154
  {
78
155
  :url => "http://localhost:5000",
@@ -82,20 +159,11 @@ describe Misty::Auth do
82
159
  }
83
160
  end
84
161
 
85
- it "fails when missing credentials" do
86
- stub_request(:post, "http://localhost:5000/v3/auth/tokens").
87
- to_return(:status => 200, :body => "{\"token\":{\"catalog\":[]}}", :headers => {"x-subject-token"=>"token_data"})
88
-
89
- proc do
90
- Misty::AuthV3.new({}, config)
91
- end.must_raise Misty::Auth::URLError
92
- end
93
-
94
162
  it "#get_token" do
95
163
  stub_request(:post, "http://localhost:5000/v3/auth/tokens").
96
164
  to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {"x-subject-token"=>"token_data"})
97
165
 
98
- auth = Misty::AuthV3.new(authv3_creds, config)
166
+ auth = Misty::AuthV3.new(authv3_creds, http)
99
167
  auth.stub :expired?, false do
100
168
  auth.get_token.must_equal "token_data"
101
169
  end
@@ -105,7 +173,7 @@ describe Misty::Auth do
105
173
  stub_request(:post, "http://localhost:5000/v3/auth/tokens").
106
174
  to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {"x-subject-token"=>"token_data"})
107
175
 
108
- auth = Misty::AuthV3.new(authv3_creds, config)
176
+ auth = Misty::AuthV3.new(authv3_creds, http)
109
177
  auth.catalog.must_equal ["catalog_data"]
110
178
  end
111
179
 
@@ -113,7 +181,7 @@ describe Misty::Auth do
113
181
  stub_request(:post, "http://localhost:5000/v3/auth/tokens").
114
182
  to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
115
183
 
116
- auth = Misty::AuthV3.new(authv3_creds, config)
184
+ auth = Misty::AuthV3.new(authv3_creds, http)
117
185
  auth.get_endpoint(%w{identity}, "regionOne", "public").must_equal "http://localhost"
118
186
  end
119
187
  end
@@ -126,12 +194,74 @@ describe Misty::Auth do
126
194
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"}}}", :headers => {})
127
195
 
128
196
  proc do
129
- Misty::AuthV2.new({}, config)
130
- end.must_raise Misty::Auth::URLError
197
+ Misty::AuthV2.new({}, http)
198
+ end.must_raise Misty::Auth::CredentialsError
199
+ end
200
+
201
+ describe "using the password method" do
202
+ it "authenticates using the tenant name" do
203
+ auth = {
204
+ :url => "http://localhost:5000",
205
+ :user => "user",
206
+ :password => "secret",
207
+ :tenant => "tenant",
208
+ }
209
+
210
+ stub_request(:post, "http://localhost:5000/v2.0/tokens").
211
+ with(:body => "{\"auth\":{\"passwordCredentials\":{\"username\":\"user\",\"password\":\"secret\"},\"tenantName\":\"tenant\"}}").
212
+ to_return(:status => 200, :body => JSON.dump(auth_response_v2("identity", "keystone")), :headers => {})
213
+
214
+ Misty::AuthV2.new(auth, http)
215
+ end
216
+
217
+ it "authenticates using the tenant id" do
218
+ auth = {
219
+ :url => "http://localhost:5000",
220
+ :user => "user",
221
+ :password => "secret",
222
+ :tenant_id => "tenant_id",
223
+ }
224
+
225
+ stub_request(:post, "http://localhost:5000/v2.0/tokens").
226
+ with(:body => "{\"auth\":{\"passwordCredentials\":{\"username\":\"user\",\"password\":\"secret\"},\"tenantId\":\"tenant_id\"}}").
227
+ to_return(:status => 200, :body => JSON.dump(auth_response_v2("identity", "keystone")), :headers => {})
228
+
229
+ Misty::AuthV2.new(auth, http)
230
+ end
231
+ end
232
+
233
+ describe "using the token method" do
234
+ it "authenticates using the tenant name" do
235
+ auth = {
236
+ :url => "http://localhost:5000",
237
+ :token => "token_id",
238
+ :tenant => "tenant",
239
+ }
240
+
241
+ stub_request(:post, "http://localhost:5000/v2.0/tokens").
242
+ with(:body => "{\"auth\":{\"token\":{\"id\":\"token_id\"},\"tenantName\":\"tenant\"}}").
243
+ to_return(:status => 200, :body => JSON.dump(auth_response_v2("identity", "keystone")), :headers => {})
244
+
245
+ Misty::AuthV2.new(auth, http)
246
+ end
247
+
248
+ it "authenticates using the tenant id" do
249
+ auth = {
250
+ :url => "http://localhost:5000",
251
+ :token => "token_id",
252
+ :tenant_id => "tenant_id",
253
+ }
254
+
255
+ stub_request(:post, "http://localhost:5000/v2.0/tokens").
256
+ with(:body => "{\"auth\":{\"token\":{\"id\":\"token_id\"},\"tenantId\":\"tenant_id\"}}").
257
+ to_return(:status => 200, :body => JSON.dump(auth_response_v2("identity", "keystone")), :headers => {})
258
+
259
+ Misty::AuthV2.new(auth, http)
260
+ end
131
261
  end
132
262
  end
133
263
 
134
- describe "with credentials" do
264
+ describe "when authenticated" do
135
265
  let(:authv2_creds) do
136
266
  {
137
267
  :url => "http://localhost:5000",
@@ -145,7 +275,7 @@ describe Misty::Auth do
145
275
  stub_request(:post, "http://localhost:5000/v2.0/tokens").
146
276
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
147
277
 
148
- auth = Misty::AuthV2.new(authv2_creds, config)
278
+ auth = Misty::AuthV2.new(authv2_creds, http)
149
279
  auth.stub :expired?, false do
150
280
  auth.get_token.must_equal "token_data"
151
281
  end
@@ -155,7 +285,7 @@ describe Misty::Auth do
155
285
  stub_request(:post, "http://localhost:5000/v2.0/tokens").
156
286
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
157
287
 
158
- auth = Misty::AuthV2.new(authv2_creds, config)
288
+ auth = Misty::AuthV2.new(authv2_creds, http)
159
289
  auth.catalog.must_equal ["catalog_data"]
160
290
  end
161
291
 
@@ -163,7 +293,7 @@ describe Misty::Auth do
163
293
  stub_request(:post, "http://localhost:5000/v2.0/tokens").
164
294
  to_return(:status => 200, :body => JSON.dump(auth_response_v2("identity", "keystone")), :headers => {"x-subject-token"=>"token_data"})
165
295
 
166
- auth = Misty::AuthV2.new(authv2_creds, config)
296
+ auth = Misty::AuthV2.new(authv2_creds, http)
167
297
  auth.get_endpoint(%w{identity}, "regionOne", "public").must_equal "http://localhost"
168
298
  end
169
299
  end
@@ -42,7 +42,7 @@ describe Misty::HTTP::Client do
42
42
  describe "#net_http" do
43
43
  it "returns a Net/http instance" do
44
44
  endpoint = URI.parse("http://localhost")
45
- service.send(:net_http, endpoint, false, Logger.new("/dev/null")).must_be_instance_of Net::HTTP
45
+ Misty::HTTP::NetHTTP.net_http(endpoint, false, Logger.new("/dev/null")).must_be_instance_of Net::HTTP
46
46
  end
47
47
  end
48
48
 
@@ -11,6 +11,7 @@ describe "Services" do
11
11
  service.name.must_equal :name
12
12
  service.project.must_equal :project
13
13
  service.versions.must_include "v1"
14
+ services.to_s.must_equal %Q{name: project: ["v1", "v2.0"]\n}
14
15
  end
15
16
  end
16
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: misty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gilles Dubreuil
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-15 00:00:00.000000000 Z
11
+ date: 2017-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json