ibm_cloud_sdk_core 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a9ddbe886404d076c07ea7b657f691b3f2a09ad758bd20efaa7555f425d75d1
4
- data.tar.gz: 9f3eb249e1f4d6408c233239eabd4ed28f146fa906bfa3b08c9b94bb26e06661
3
+ metadata.gz: 632fa6196faf266c004867a8002a4dc159aa652d9dd26144975a987cb9b0e7c0
4
+ data.tar.gz: 4d555fd04a96095a72e01dd78be693c66bb0e04e36f4307ee211042256960fe8
5
5
  SHA512:
6
- metadata.gz: 3a12157d888a148803b7943f1b372bf54d7e84822d9408426a0a6d401af80f672b5fde0bff5a1b6623e8cc8a1fb74d7cf80bfb52ad7db0c129dcd4409c4479ad
7
- data.tar.gz: ea21d829cdb3c02dc25874649f867d5ff65d4f0cb7cdcb06542774d1aba2bbb60350ea5ea5e8bd55c6d7f6d55b449aad0c32d53f9906be9e23459265ed0ce996
6
+ metadata.gz: bea320e17520b61c97bd2b48cb230a401fed62476749250779622598d5a40242f1b186fafee50e4829257d356b528b536c78010f389073e731619589ab985f22
7
+ data.tar.gz: 106b79e7a30871c74c84ad47ae8d17cbaa306dd98dc1174f06a23a471865cea42954d06030fd301174cac7ab868fdd76abd19db54bb4840eca47103b1b3e58f8
@@ -39,16 +39,11 @@ module IBMCloudSdkCore
39
39
 
40
40
  raise ArgumentError.new("authenticator must be provided") if @authenticator.nil?
41
41
 
42
- if @service_name && !@service_url
43
- config = get_service_properties(@service_name)
44
- @service_url = config[:url] unless config.nil?
45
- end
46
-
47
- configure_http_client(disable_ssl_verification: @disable_ssl_verification)
48
- @temp_headers = {}
49
42
  @conn = HTTP::Client.new(
50
43
  headers: {}
51
44
  ).use normalize_uri: { normalizer: NORMALIZER }
45
+ configure_service(@service_name)
46
+ @temp_headers = {}
52
47
  end
53
48
 
54
49
  def disable_ssl_verification=(disable_ssl_verification)
@@ -61,6 +56,15 @@ module IBMCloudSdkCore
61
56
  headers.each_pair { |k, v| @conn.default_options.headers.add(k, v) }
62
57
  end
63
58
 
59
+ def configure_service(service_name)
60
+ config = get_service_properties(service_name) if service_name
61
+
62
+ @service_url = config[:url] unless config.nil? || config[:url].nil?
63
+ disable_ssl_verification = explicitly_true(config[:disable_ssl]) unless config.nil? || config[:disable_ssl].nil?
64
+ # configure the http client if ssl is disabled
65
+ configure_http_client(disable_ssl_verification: disable_ssl_verification) if disable_ssl_verification
66
+ end
67
+
64
68
  # @return [DetailedResponse]
65
69
  def request(args)
66
70
  defaults = { method: nil, url: nil, accept_json: false, headers: nil, params: nil, json: {}, data: nil }
@@ -143,8 +147,6 @@ module IBMCloudSdkCore
143
147
  ssl_context = OpenSSL::SSL::SSLContext.new
144
148
  ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
145
149
  @conn.default_options = { ssl_context: ssl_context }
146
-
147
- @token_manager&.ssl_verification(true)
148
150
  end
149
151
  add_proxy(proxy) unless proxy.empty? || !proxy.dig(:address).is_a?(String) || !proxy.dig(:port).is_a?(Integer)
150
152
  add_timeout(timeout) unless timeout.empty? || (!timeout.key?(:per_operation) && !timeout.key?(:global))
@@ -16,6 +16,13 @@ def check_bad_first_or_last_char(str)
16
16
  return str.start_with?("{", "\"") || str.end_with?("}", "\"") unless str.nil?
17
17
  end
18
18
 
19
+ # checks if the provided value is truthy
20
+ def explicitly_true(value)
21
+ return value.to_s.casecmp("true").zero? unless value.nil?
22
+
23
+ false
24
+ end
25
+
19
26
  # Initiates the credentials based on the credential file
20
27
  def load_from_credential_file(service_name, separator = "=")
21
28
  credential_file_path = ENV["IBM_CREDENTIALS_FILE"]
@@ -63,10 +70,20 @@ def load_from_vcap_services(service_name)
63
70
  vcap_services = ENV["VCAP_SERVICES"]
64
71
  unless vcap_services.nil?
65
72
  services = JSON.parse(vcap_services)
73
+ credentials = ""
74
+ # search for matching inner name value
75
+ services.each do |_key, val|
76
+ service = val.detect { |item| item["name"] == service_name }
77
+ credentials = service["credentials"] unless service.nil?
78
+ break unless credentials.nil? || credentials.empty?
79
+ end
66
80
  config = {}
67
- credentials = services[service_name][0]["credentials"] if services.key?(service_name)
68
- return config if credentials.nil?
69
-
81
+ # if no matching inner key is found, then search outer keys
82
+ if credentials.nil? || credentials.empty?
83
+ credentials = services[service_name][0]["credentials"] if services.key?(service_name) && !services[service_name].empty?
84
+ return config if credentials.nil? || credentials.empty?
85
+ end
86
+ # store credentials
70
87
  credentials.each do |key, val|
71
88
  config.store(key.to_sym, val)
72
89
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IBMCloudSdkCore
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -26,6 +26,7 @@ class BaseServiceTest < Minitest::Test
26
26
  assert_raises do
27
27
  IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "wrong")
28
28
  end
29
+ ENV.delete("IBM_CREDENTIALS_FILE")
29
30
  end
30
31
 
31
32
  def test_wrong_url
@@ -130,6 +131,7 @@ class BaseServiceTest < Minitest::Test
130
131
  service = IBMCloudSdkCore::BaseService.new(service_name: "leo_messi", url: "some.url", authenticator: authenticator)
131
132
  assert_equal(authenticator.authentication_type, "bearerToken")
132
133
  refute_nil(service)
134
+ ENV.delete("IBM_CREDENTIALS_FILE")
133
135
  end
134
136
 
135
137
  def test_vcap_services
@@ -138,6 +140,7 @@ class BaseServiceTest < Minitest::Test
138
140
  service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator)
139
141
  assert_equal(authenticator.username, "mo")
140
142
  assert_equal(service.service_name, "salah")
143
+ ENV.delete("VCAP_SERVICES")
141
144
  end
142
145
 
143
146
  def test_dummy_request
@@ -149,9 +152,11 @@ class BaseServiceTest < Minitest::Test
149
152
  }
150
153
  ).to_return(status: 200, body: "", headers: {})
151
154
  authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
152
- service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator, service_url: "https://we.the.best")
155
+ service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator)
156
+ service.service_url = "https://we.the.best"
153
157
  service_response = service.request(method: "GET", url: "/music", headers: {})
154
158
  assert_equal("", service_response.result)
159
+ ENV.delete("VCAP_SERVICES")
155
160
  end
156
161
 
157
162
  def test_dummy_request_form_data
@@ -192,10 +197,12 @@ class BaseServiceTest < Minitest::Test
192
197
  }
193
198
  ).to_return(status: 500, body: response.to_json, headers: {})
194
199
  authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
195
- service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator, service_url: "https://we.the.best")
200
+ service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator)
201
+ service.service_url = "https://we.the.best"
196
202
  assert_raises IBMCloudSdkCore::ApiException do
197
203
  service.request(method: "GET", url: "/music", headers: {})
198
204
  end
205
+ ENV.delete("VCAP_SERVICES")
199
206
  end
200
207
 
201
208
  def test_dummy_request_icp
@@ -225,4 +232,103 @@ class BaseServiceTest < Minitest::Test
225
232
  service_response = service.request(method: "GET", url: "/music", headers: {})
226
233
  assert_equal(response, service_response.result)
227
234
  end
235
+
236
+ def test_configure_service_using_credentials_in_env
237
+ file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
238
+ ENV["IBM_CREDENTIALS_FILE"] = file_path
239
+
240
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
241
+ username: "apikey",
242
+ password: "icp-xyz"
243
+ )
244
+ service = IBMCloudSdkCore::BaseService.new(
245
+ authenticator: authenticator,
246
+ service_name: "visual_recognition"
247
+ )
248
+ service.configure_service("visual_recognition")
249
+
250
+ assert_equal("https://gateway.ronaldo.com", service.service_url)
251
+ assert(service.disable_ssl_verification)
252
+ ENV.delete("IBM_CREDENTIALS_FILE")
253
+ end
254
+
255
+ def test_configure_service_using_credentials_in_vcap_match_outer_key
256
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
257
+ username: "apikey",
258
+ password: "icp-xyz"
259
+ )
260
+ service = IBMCloudSdkCore::BaseService.new(
261
+ authenticator: authenticator,
262
+ service_name: "key_to_service_entry_1"
263
+ )
264
+ ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json
265
+ service.configure_service("key_to_service_entry_1")
266
+
267
+ assert_equal("https://on.the.toolchainplatform.net/devops-insights/api", service.service_url)
268
+ ENV.delete("VCAP_SERVICES")
269
+ end
270
+
271
+ def test_configure_service_using_credentials_in_vcap_match_inner_key
272
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
273
+ username: "apikey",
274
+ password: "icp-xyz"
275
+ )
276
+ service = IBMCloudSdkCore::BaseService.new(
277
+ authenticator: authenticator,
278
+ service_name: "devops_insights"
279
+ )
280
+ ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json
281
+ service.configure_service("devops_insights")
282
+
283
+ assert_equal("https://ibmtesturl.net/devops_insights/api", service.service_url)
284
+ ENV.delete("VCAP_SERVICES")
285
+ end
286
+
287
+ def test_configure_service_using_credentials_in_vcap_no_matching_key
288
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
289
+ username: "apikey",
290
+ password: "icp-xyz"
291
+ )
292
+ service = IBMCloudSdkCore::BaseService.new(
293
+ authenticator: authenticator,
294
+ service_name: "different_name_two"
295
+ )
296
+ ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json
297
+ service.configure_service("different_name_two")
298
+
299
+ assert_equal("https://gateway.watsonplatform.net/different-name-two/api", service.service_url)
300
+ ENV.delete("VCAP_SERVICES")
301
+ end
302
+
303
+ def test_configure_service_using_credentials_in_vcap_empty_entry
304
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
305
+ username: "apikey",
306
+ password: "icp-xyz"
307
+ )
308
+ service = IBMCloudSdkCore::BaseService.new(
309
+ authenticator: authenticator,
310
+ service_name: "empty_service"
311
+ )
312
+ ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json
313
+ service.configure_service("empty_service")
314
+
315
+ assert_nil(service.service_url)
316
+ ENV.delete("VCAP_SERVICES")
317
+ end
318
+
319
+ def test_configure_service_using_credentials_in_vcap_no_creds
320
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
321
+ username: "apikey",
322
+ password: "icp-xyz"
323
+ )
324
+ service = IBMCloudSdkCore::BaseService.new(
325
+ authenticator: authenticator,
326
+ service_name: "no-creds-service-two"
327
+ )
328
+ ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json
329
+ service.configure_service("no-creds-service-two")
330
+
331
+ assert_nil(service.service_url)
332
+ ENV.delete("VCAP_SERVICES")
333
+ end
228
334
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require("json")
4
+ require("jwt")
5
+ require_relative("./../test_helper.rb")
6
+ require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator")
7
+ require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory")
8
+ require("webmock/minitest")
9
+
10
+ WebMock.disable_net_connect!(allow_localhost: true)
11
+
12
+ # Unit tests for the utility methods
13
+ class UtilsTest < Minitest::Test
14
+ def test_explicitly_true
15
+ assert(explicitly_true("true"))
16
+ assert(explicitly_true("True"))
17
+ assert(explicitly_true(true))
18
+
19
+ assert_equal(explicitly_true("false"), false)
20
+ assert_equal(explicitly_true("False"), false)
21
+ assert_equal(explicitly_true("someothervalue"), false)
22
+ assert_equal(explicitly_true(""), false)
23
+ assert_equal(explicitly_true(false), false)
24
+ assert_equal(explicitly_true(nil), false)
25
+ end
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibm_cloud_sdk_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mamoon Raja
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-30 00:00:00.000000000 Z
11
+ date: 2019-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -253,6 +253,7 @@ files:
253
253
  - test/unit/test_iam_authenticator.rb
254
254
  - test/unit/test_iam_token_manager.rb
255
255
  - test/unit/test_jwt_token_manager.rb
256
+ - test/unit/test_utils.rb
256
257
  homepage: https://www.github.com/IBM
257
258
  licenses:
258
259
  - Apache-2.0