kubeclient 4.9.1 → 4.12.0

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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/actions.yml +43 -0
  3. data/.rubocop.yml +111 -14
  4. data/CHANGELOG.md +100 -0
  5. data/README.md +14 -4
  6. data/RELEASING.md +8 -8
  7. data/kubeclient.gemspec +10 -6
  8. data/lib/kubeclient/aws_eks_credentials.rb +17 -8
  9. data/lib/kubeclient/common.rb +24 -19
  10. data/lib/kubeclient/config.rb +22 -10
  11. data/lib/kubeclient/version.rb +1 -1
  12. data/lib/kubeclient/watch_stream.rb +1 -0
  13. metadata +45 -223
  14. data/.travis.yml +0 -29
  15. data/test/cassettes/kubernetes_guestbook.yml +0 -879
  16. data/test/config/allinone.kubeconfig +0 -20
  17. data/test/config/execauth.kubeconfig +0 -62
  18. data/test/config/external-ca.pem +0 -18
  19. data/test/config/external-cert.pem +0 -19
  20. data/test/config/external-key.rsa +0 -27
  21. data/test/config/external.kubeconfig +0 -20
  22. data/test/config/gcpauth.kubeconfig +0 -22
  23. data/test/config/gcpcmdauth.kubeconfig +0 -26
  24. data/test/config/nouser.kubeconfig +0 -16
  25. data/test/config/oidcauth.kubeconfig +0 -25
  26. data/test/config/timestamps.kubeconfig +0 -25
  27. data/test/config/userauth.kubeconfig +0 -28
  28. data/test/json/bindings_list.json +0 -10
  29. data/test/json/component_status.json +0 -17
  30. data/test/json/component_status_list.json +0 -52
  31. data/test/json/config.istio.io_api_resource_list.json +0 -679
  32. data/test/json/config_map_list.json +0 -9
  33. data/test/json/core_api_resource_list.json +0 -181
  34. data/test/json/core_api_resource_list_without_kind.json +0 -129
  35. data/test/json/core_oapi_resource_list_without_kind.json +0 -197
  36. data/test/json/created_endpoint.json +0 -28
  37. data/test/json/created_namespace.json +0 -20
  38. data/test/json/created_secret.json +0 -16
  39. data/test/json/created_security_context_constraint.json +0 -65
  40. data/test/json/created_service.json +0 -31
  41. data/test/json/empty_pod_list.json +0 -9
  42. data/test/json/endpoint_list.json +0 -48
  43. data/test/json/entity_list.json +0 -56
  44. data/test/json/event_list.json +0 -35
  45. data/test/json/extensions_v1beta1_api_resource_list.json +0 -217
  46. data/test/json/limit_range.json +0 -23
  47. data/test/json/limit_range_list.json +0 -31
  48. data/test/json/namespace.json +0 -13
  49. data/test/json/namespace_exception.json +0 -8
  50. data/test/json/namespace_list.json +0 -32
  51. data/test/json/node.json +0 -29
  52. data/test/json/node_list.json +0 -37
  53. data/test/json/node_notice.json +0 -160
  54. data/test/json/persistent_volume.json +0 -37
  55. data/test/json/persistent_volume_claim.json +0 -32
  56. data/test/json/persistent_volume_claim_list.json +0 -40
  57. data/test/json/persistent_volume_claims_nil_items.json +0 -8
  58. data/test/json/persistent_volume_list.json +0 -45
  59. data/test/json/pod.json +0 -92
  60. data/test/json/pod_list.json +0 -79
  61. data/test/json/pod_template_list.json +0 -9
  62. data/test/json/pods_1.json +0 -265
  63. data/test/json/pods_2.json +0 -102
  64. data/test/json/pods_410.json +0 -9
  65. data/test/json/processed_template.json +0 -27
  66. data/test/json/replication_controller.json +0 -57
  67. data/test/json/replication_controller_list.json +0 -66
  68. data/test/json/resource_quota.json +0 -46
  69. data/test/json/resource_quota_list.json +0 -54
  70. data/test/json/secret_list.json +0 -44
  71. data/test/json/security.openshift.io_api_resource_list.json +0 -69
  72. data/test/json/security_context_constraint_list.json +0 -375
  73. data/test/json/service.json +0 -33
  74. data/test/json/service_account.json +0 -25
  75. data/test/json/service_account_list.json +0 -82
  76. data/test/json/service_illegal_json_404.json +0 -1
  77. data/test/json/service_json_patch.json +0 -26
  78. data/test/json/service_list.json +0 -97
  79. data/test/json/service_merge_patch.json +0 -26
  80. data/test/json/service_patch.json +0 -25
  81. data/test/json/service_update.json +0 -22
  82. data/test/json/template.json +0 -27
  83. data/test/json/template.openshift.io_api_resource_list.json +0 -75
  84. data/test/json/template_list.json +0 -35
  85. data/test/json/versions_list.json +0 -6
  86. data/test/json/watch_stream.json +0 -3
  87. data/test/test_common.rb +0 -95
  88. data/test/test_common_url_handling.rb +0 -160
  89. data/test/test_component_status.rb +0 -29
  90. data/test/test_config.rb +0 -222
  91. data/test/test_endpoint.rb +0 -54
  92. data/test/test_exec_credentials.rb +0 -225
  93. data/test/test_gcp_command_credentials.rb +0 -27
  94. data/test/test_google_application_default_credentials.rb +0 -15
  95. data/test/test_guestbook_go.rb +0 -235
  96. data/test/test_helper.rb +0 -18
  97. data/test/test_kubeclient.rb +0 -881
  98. data/test/test_limit_range.rb +0 -25
  99. data/test/test_missing_methods.rb +0 -80
  100. data/test/test_namespace.rb +0 -59
  101. data/test/test_node.rb +0 -70
  102. data/test/test_oidc_auth_provider.rb +0 -103
  103. data/test/test_persistent_volume.rb +0 -29
  104. data/test/test_persistent_volume_claim.rb +0 -28
  105. data/test/test_pod.rb +0 -81
  106. data/test/test_pod_log.rb +0 -157
  107. data/test/test_process_template.rb +0 -80
  108. data/test/test_replication_controller.rb +0 -47
  109. data/test/test_resource_list_without_kind.rb +0 -78
  110. data/test/test_resource_quota.rb +0 -23
  111. data/test/test_secret.rb +0 -62
  112. data/test/test_security_context_constraint.rb +0 -62
  113. data/test/test_service.rb +0 -357
  114. data/test/test_service_account.rb +0 -26
  115. data/test/test_watch.rb +0 -195
  116. data/test/txt/pod_log.txt +0 -6
  117. data/test/valid_token_file +0 -1
data/test/test_config.rb DELETED
@@ -1,222 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'yaml'
3
- require 'open3'
4
-
5
- # Testing Kubernetes client configuration
6
- class KubeclientConfigTest < MiniTest::Test
7
- def test_allinone
8
- config = Kubeclient::Config.read(config_file('allinone.kubeconfig'))
9
- assert_equal(['default/localhost:8443/system:admin'], config.contexts)
10
- check_context(config.context, ssl: true)
11
- end
12
-
13
- def test_external
14
- config = Kubeclient::Config.read(config_file('external.kubeconfig'))
15
- assert_equal(['default/localhost:8443/system:admin'], config.contexts)
16
- check_context(config.context, ssl: true)
17
- end
18
-
19
- def test_allinone_nopath
20
- yaml = File.read(config_file('allinone.kubeconfig'))
21
- # A self-contained config shouldn't depend on kcfg_path.
22
- config = Kubeclient::Config.new(YAML.safe_load(yaml), nil)
23
- assert_equal(['default/localhost:8443/system:admin'], config.contexts)
24
- check_context(config.context, ssl: true)
25
- end
26
-
27
- def test_external_nopath
28
- yaml = File.read(config_file('external.kubeconfig'))
29
- # kcfg_path = nil should prevent file access
30
- config = Kubeclient::Config.new(YAML.safe_load(yaml), nil)
31
- assert_raises(StandardError) do
32
- config.context
33
- end
34
- end
35
-
36
- def test_external_nopath_absolute
37
- yaml = File.read(config_file('external.kubeconfig'))
38
- # kcfg_path = nil should prevent file access, even if absolute path specified
39
- ca_absolute_path = File.absolute_path(config_file('external-'))
40
- yaml = yaml.gsub('external-', ca_absolute_path)
41
- config = Kubeclient::Config.new(YAML.safe_load(yaml), nil)
42
- assert_raises(StandardError) do
43
- config.context
44
- end
45
- end
46
-
47
- def test_nouser
48
- config = Kubeclient::Config.read(config_file('nouser.kubeconfig'))
49
- assert_equal(['default/localhost:8443/nouser'], config.contexts)
50
- check_context(config.context, ssl: false)
51
- end
52
-
53
- def test_user_token
54
- config = Kubeclient::Config.read(config_file('userauth.kubeconfig'))
55
- assert_equal(['localhost/system:admin:token', 'localhost/system:admin:userpass'],
56
- config.contexts)
57
- context = config.context('localhost/system:admin:token')
58
- check_context(context, ssl: false)
59
- assert_equal('0123456789ABCDEF0123456789ABCDEF', context.auth_options[:bearer_token])
60
- end
61
-
62
- def test_user_password
63
- config = Kubeclient::Config.read(config_file('userauth.kubeconfig'))
64
- assert_equal(['localhost/system:admin:token', 'localhost/system:admin:userpass'],
65
- config.contexts)
66
- context = config.context('localhost/system:admin:userpass')
67
- check_context(context, ssl: false)
68
- assert_equal('admin', context.auth_options[:username])
69
- assert_equal('pAssw0rd123', context.auth_options[:password])
70
- end
71
-
72
- def test_timestamps
73
- # Test YAML parsing doesn't crash on YAML timestamp syntax.
74
- Kubeclient::Config.read(config_file('timestamps.kubeconfig'))
75
- end
76
-
77
- def test_user_exec
78
- token = '0123456789ABCDEF0123456789ABCDEF'
79
- creds = {
80
- 'apiVersion': 'client.authentication.k8s.io/v1beta1',
81
- 'status': {
82
- 'token': token
83
- }
84
- }
85
-
86
- config = Kubeclient::Config.read(config_file('execauth.kubeconfig'))
87
- assert_equal(['localhost/system:admin:exec-search-path',
88
- 'localhost/system:admin:exec-relative-path',
89
- 'localhost/system:admin:exec-absolute-path'],
90
- config.contexts)
91
-
92
- # A bare command name in config means search PATH, so it's executed as bare command.
93
- stub_exec(%r{^example-exec-plugin$}, creds) do
94
- context = config.context('localhost/system:admin:exec-search-path')
95
- check_context(context, ssl: false)
96
- assert_equal(token, context.auth_options[:bearer_token])
97
- end
98
-
99
- # A relative path is taken relative to the dir of the kubeconfig.
100
- stub_exec(%r{.*config/dir/example-exec-plugin$}, creds) do
101
- context = config.context('localhost/system:admin:exec-relative-path')
102
- check_context(context, ssl: false)
103
- assert_equal(token, context.auth_options[:bearer_token])
104
- end
105
-
106
- # An absolute path is taken as-is.
107
- stub_exec(%r{^/abs/path/example-exec-plugin$}, creds) do
108
- context = config.context('localhost/system:admin:exec-absolute-path')
109
- check_context(context, ssl: false)
110
- assert_equal(token, context.auth_options[:bearer_token])
111
- end
112
- end
113
-
114
- def test_user_exec_nopath
115
- yaml = File.read(config_file('execauth.kubeconfig'))
116
- config = Kubeclient::Config.new(YAML.safe_load(yaml), nil)
117
- config.contexts.each do |context_name|
118
- Open3.stub(:capture3, proc { flunk 'should not execute command' }) do
119
- assert_raises(StandardError) do
120
- config.context(context_name)
121
- end
122
- end
123
- end
124
- end
125
-
126
- def test_gcp_default_auth
127
- Kubeclient::GoogleApplicationDefaultCredentials.expects(:token).returns('token1').once
128
- parsed = YAML.safe_load(File.read(config_file('gcpauth.kubeconfig')), [Date, Time])
129
- config = Kubeclient::Config.new(parsed, nil)
130
- config.context(config.contexts.first)
131
- end
132
-
133
- # Each call to .context() obtains a new token, calling .auth_options doesn't change anything.
134
- # NOTE: this is not a guarantee, may change, just testing current behavior.
135
- def test_gcp_default_auth_renew
136
- Kubeclient::GoogleApplicationDefaultCredentials.expects(:token).returns('token1').once
137
- parsed = YAML.safe_load(File.read(config_file('gcpauth.kubeconfig')), [Date, Time])
138
- config = Kubeclient::Config.new(parsed, nil)
139
- context = config.context(config.contexts.first)
140
- assert_equal({ bearer_token: 'token1' }, context.auth_options)
141
- assert_equal({ bearer_token: 'token1' }, context.auth_options)
142
-
143
- Kubeclient::GoogleApplicationDefaultCredentials.expects(:token).returns('token2').once
144
- context2 = config.context(config.contexts.first)
145
- assert_equal({ bearer_token: 'token2' }, context2.auth_options)
146
- assert_equal({ bearer_token: 'token1' }, context.auth_options)
147
- end
148
-
149
- def test_gcp_command_auth
150
- Kubeclient::GCPCommandCredentials.expects(:token)
151
- .with('access-token' => '<fake_token>',
152
- 'cmd-args' => 'config config-helper --format=json',
153
- 'cmd-path' => '/path/to/gcloud',
154
- 'expiry' => '2019-04-09 19:26:18 UTC',
155
- 'expiry-key' => '{.credential.token_expiry}',
156
- 'token-key' => '{.credential.access_token}')
157
- .returns('token1')
158
- .once
159
- config = Kubeclient::Config.read(config_file('gcpcmdauth.kubeconfig'))
160
- config.context(config.contexts.first)
161
- end
162
-
163
- def test_oidc_auth_provider
164
- Kubeclient::OIDCAuthProvider.expects(:token)
165
- .with('client-id' => 'fake-client-id',
166
- 'client-secret' => 'fake-client-secret',
167
- 'id-token' => 'fake-id-token',
168
- 'idp-issuer-url' => 'https://accounts.google.com',
169
- 'refresh-token' => 'fake-refresh-token')
170
- .returns('token1')
171
- .once
172
- parsed = YAML.safe_load(File.read(config_file('oidcauth.kubeconfig')))
173
- config = Kubeclient::Config.new(parsed, nil)
174
- config.context(config.contexts.first)
175
- end
176
-
177
- private
178
-
179
- def check_context(context, ssl: true)
180
- assert_equal('https://localhost:8443', context.api_endpoint)
181
- assert_equal('v1', context.api_version)
182
- assert_equal('default', context.namespace)
183
- if ssl
184
- assert_equal(OpenSSL::SSL::VERIFY_PEER, context.ssl_options[:verify_ssl])
185
- assert_kind_of(OpenSSL::X509::Store, context.ssl_options[:cert_store])
186
- assert_kind_of(OpenSSL::X509::Certificate, context.ssl_options[:client_cert])
187
- assert_kind_of(OpenSSL::PKey::RSA, context.ssl_options[:client_key])
188
- # When certificates expire the quickest way to recreate them is using
189
- # an OpenShift tool (100% compatible with kubernetes):
190
- #
191
- # $ oc adm ca create-master-certs --hostnames=localhost
192
- #
193
- # At the time of this writing the files to be updated are:
194
- #
195
- # cp openshift.local.config/master/admin.kubeconfig test/config/allinone.kubeconfig
196
- # cp openshift.local.config/master/ca.crt test/config/external-ca.pem
197
- # cp openshift.local.config/master/admin.crt test/config/external-cert.pem
198
- # cp openshift.local.config/master/admin.key test/config/external-key.rsa
199
- assert(context.ssl_options[:cert_store].verify(context.ssl_options[:client_cert]))
200
- else
201
- assert_equal(OpenSSL::SSL::VERIFY_NONE, context.ssl_options[:verify_ssl])
202
- end
203
- end
204
-
205
- def config_file(name)
206
- File.join(File.dirname(__FILE__), 'config', name)
207
- end
208
-
209
- def stub_exec(command_regexp, creds)
210
- st = Minitest::Mock.new
211
- st.expect(:success?, true)
212
-
213
- capture3_stub = lambda do |_env, command, *_args|
214
- assert_match command_regexp, command
215
- [JSON.dump(creds), nil, st]
216
- end
217
-
218
- Open3.stub(:capture3, capture3_stub) do
219
- yield
220
- end
221
- end
222
- end
@@ -1,54 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- # kind: 'Endpoints' entity tests.
4
- # This is one of the unusual `kind`s that are already plural (https://github.com/kubernetes/kubernetes/issues/8115).
5
- # We force singular in method names like 'create_endpoint',
6
- # but `kind` should remain plural as in kubernetes.
7
- class TestEndpoint < MiniTest::Test
8
- def test_create_endpoint
9
- stub_core_api_list
10
- testing_ep = Kubeclient::Resource.new
11
- testing_ep.metadata = {}
12
- testing_ep.metadata.name = 'myendpoint'
13
- testing_ep.metadata.namespace = 'default'
14
- testing_ep.subsets = [
15
- {
16
- 'addresses' => [{ 'ip' => '172.17.0.25' }],
17
- 'ports' => [{ 'name' => 'https', 'port' => 6443, 'protocol' => 'TCP' }]
18
- }
19
- ]
20
-
21
- req_body = '{"metadata":{"name":"myendpoint","namespace":"default"},' \
22
- '"subsets":[{"addresses":[{"ip":"172.17.0.25"}],"ports":[{"name":"https",' \
23
- '"port":6443,"protocol":"TCP"}]}],"kind":"Endpoints","apiVersion":"v1"}'
24
-
25
- stub_request(:post, 'http://localhost:8080/api/v1/namespaces/default/endpoints')
26
- .with(body: req_body)
27
- .to_return(body: open_test_file('created_endpoint.json'), status: 201)
28
-
29
- client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
30
- created_ep = client.create_endpoint(testing_ep)
31
- assert_equal('Endpoints', created_ep.kind)
32
- assert_equal('v1', created_ep.apiVersion)
33
-
34
- client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1', as: :parsed_symbolized)
35
- created_ep = client.create_endpoint(testing_ep)
36
- assert_equal('Endpoints', created_ep[:kind])
37
- assert_equal('v1', created_ep[:apiVersion])
38
- end
39
-
40
- def test_get_endpoints
41
- stub_core_api_list
42
- stub_request(:get, %r{/endpoints})
43
- .to_return(body: open_test_file('endpoint_list.json'), status: 200)
44
- client = Kubeclient::Client.new('http://localhost:8080/api/', 'v1')
45
-
46
- collection = client.get_endpoints(as: :parsed_symbolized)
47
- assert_equal('EndpointsList', collection[:kind])
48
- assert_equal('v1', collection[:apiVersion])
49
-
50
- # Stripping of 'List' in collection.kind RecursiveOpenStruct mode only is historic.
51
- collection = client.get_endpoints
52
- assert_equal('Endpoints', collection.kind)
53
- end
54
- end
@@ -1,225 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'open3'
3
-
4
- # Unit tests for the ExecCredentials provider
5
- class ExecCredentialsTest < MiniTest::Test
6
- def test_exec_opts_missing
7
- expected_msg =
8
- 'exec options are required'
9
- exception = assert_raises(ArgumentError) do
10
- Kubeclient::ExecCredentials.run(nil)
11
- end
12
- assert_equal(expected_msg, exception.message)
13
- end
14
-
15
- def test_exec_command_missing
16
- expected_msg =
17
- 'exec command is required'
18
- exception = assert_raises(KeyError) do
19
- Kubeclient::ExecCredentials.run({})
20
- end
21
- assert_equal(expected_msg, exception.message)
22
- end
23
-
24
- def test_exec_command_failure
25
- err = 'Error'
26
- expected_msg =
27
- "exec command failed: #{err}"
28
-
29
- st = Minitest::Mock.new
30
- st.expect(:success?, false)
31
-
32
- opts = { 'command' => 'dummy' }
33
-
34
- Open3.stub(:capture3, [nil, err, st]) do
35
- exception = assert_raises(RuntimeError) do
36
- Kubeclient::ExecCredentials.run(opts)
37
- end
38
- assert_equal(expected_msg, exception.message)
39
- end
40
- end
41
-
42
- def test_run_with_token_credentials
43
- opts = { 'command' => 'dummy' }
44
-
45
- credentials = {
46
- 'token' => '0123456789ABCDEF0123456789ABCDEF'
47
- }
48
-
49
- creds = JSON.dump(
50
- 'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
51
- 'status' => credentials
52
- )
53
-
54
- st = Minitest::Mock.new
55
- st.expect(:success?, true)
56
-
57
- Open3.stub(:capture3, [creds, nil, st]) do
58
- assert_equal(credentials, Kubeclient::ExecCredentials.run(opts))
59
- end
60
- end
61
-
62
- def test_run_with_client_credentials
63
- opts = { 'command' => 'dummy' }
64
-
65
- credentials = {
66
- 'clientCertificateData' => '0123456789ABCDEF0123456789ABCDEF',
67
- 'clientKeyData' => '0123456789ABCDEF0123456789ABCDEF'
68
- }
69
-
70
- creds = JSON.dump(
71
- 'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
72
- 'status' => credentials
73
- )
74
-
75
- st = Minitest::Mock.new
76
- st.expect(:success?, true)
77
-
78
- Open3.stub(:capture3, [creds, nil, st]) do
79
- assert_equal(credentials, Kubeclient::ExecCredentials.run(opts))
80
- end
81
- end
82
-
83
- def test_run_with_missing_client_certificate_data
84
- opts = { 'command' => 'dummy' }
85
-
86
- credentials = {
87
- 'clientKeyData' => '0123456789ABCDEF0123456789ABCDEF'
88
- }
89
-
90
- creds = JSON.dump(
91
- 'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
92
- 'status' => credentials
93
- )
94
-
95
- st = Minitest::Mock.new
96
- st.expect(:success?, true)
97
-
98
- expected_msg = 'exec plugin didn\'t return client certificate data'
99
-
100
- Open3.stub(:capture3, [creds, nil, st]) do
101
- exception = assert_raises(RuntimeError) do
102
- Kubeclient::ExecCredentials.run(opts)
103
- end
104
- assert_equal(expected_msg, exception.message)
105
- end
106
- end
107
-
108
- def test_run_with_missing_client_key_data
109
- opts = { 'command' => 'dummy' }
110
-
111
- credentials = {
112
- 'clientCertificateData' => '0123456789ABCDEF0123456789ABCDEF'
113
- }
114
-
115
- creds = JSON.dump(
116
- 'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
117
- 'status' => credentials
118
- )
119
-
120
- st = Minitest::Mock.new
121
- st.expect(:success?, true)
122
-
123
- expected_msg = 'exec plugin didn\'t return client key data'
124
-
125
- Open3.stub(:capture3, [creds, nil, st]) do
126
- exception = assert_raises(RuntimeError) do
127
- Kubeclient::ExecCredentials.run(opts)
128
- end
129
- assert_equal(expected_msg, exception.message)
130
- end
131
- end
132
-
133
- def test_run_with_client_data_and_token
134
- opts = { 'command' => 'dummy' }
135
-
136
- credentials = {
137
- 'clientCertificateData' => '0123456789ABCDEF0123456789ABCDEF',
138
- 'clientKeyData' => '0123456789ABCDEF0123456789ABCDEF',
139
- 'token' => '0123456789ABCDEF0123456789ABCDEF'
140
- }
141
-
142
- creds = JSON.dump(
143
- 'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
144
- 'status' => credentials
145
- )
146
-
147
- st = Minitest::Mock.new
148
- st.expect(:success?, true)
149
-
150
- expected_msg = 'exec plugin returned both token and client data'
151
-
152
- Open3.stub(:capture3, [creds, nil, st]) do
153
- exception = assert_raises(RuntimeError) do
154
- Kubeclient::ExecCredentials.run(opts)
155
- end
156
- assert_equal(expected_msg, exception.message)
157
- end
158
- end
159
-
160
- def test_status_missing
161
- opts = { 'command' => 'dummy' }
162
-
163
- creds = JSON.dump('apiVersion' => 'client.authentication.k8s.io/v1alpha1')
164
-
165
- st = Minitest::Mock.new
166
- st.expect(:success?, true)
167
-
168
- expected_msg = 'exec plugin didn\'t return a status field'
169
-
170
- Open3.stub(:capture3, [creds, nil, st]) do
171
- exception = assert_raises(RuntimeError) do
172
- Kubeclient::ExecCredentials.run(opts)
173
- end
174
- assert_equal(expected_msg, exception.message)
175
- end
176
- end
177
-
178
- def test_credentials_missing
179
- opts = { 'command' => 'dummy' }
180
-
181
- creds = JSON.dump(
182
- 'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
183
- 'status' => {}
184
- )
185
-
186
- st = Minitest::Mock.new
187
- st.expect(:success?, true)
188
-
189
- expected_msg = 'exec plugin didn\'t return a token or client data'
190
-
191
- Open3.stub(:capture3, [creds, nil, st]) do
192
- exception = assert_raises(RuntimeError) do
193
- Kubeclient::ExecCredentials.run(opts)
194
- end
195
- assert_equal(expected_msg, exception.message)
196
- end
197
- end
198
-
199
- def test_api_version_mismatch
200
- api_version = 'client.authentication.k8s.io/v1alpha1'
201
- expected_version = 'client.authentication.k8s.io/v1beta1'
202
-
203
- opts = {
204
- 'command' => 'dummy',
205
- 'apiVersion' => expected_version
206
- }
207
-
208
- creds = JSON.dump(
209
- 'apiVersion' => api_version
210
- )
211
-
212
- st = Minitest::Mock.new
213
- st.expect(:success?, true)
214
-
215
- expected_msg = "exec plugin is configured to use API version #{expected_version}," \
216
- " plugin returned version #{api_version}"
217
-
218
- Open3.stub(:capture3, [creds, nil, st]) do
219
- exception = assert_raises(RuntimeError) do
220
- Kubeclient::ExecCredentials.run(opts)
221
- end
222
- assert_equal(expected_msg, exception.message)
223
- end
224
- end
225
- end
@@ -1,27 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'open3'
3
-
4
- # Unit tests for the GCPCommandCredentials token provider
5
- class GCPCommandCredentialsTest < MiniTest::Test
6
- def test_token
7
- opts = { 'cmd-args' => 'config config-helper --format=json',
8
- 'cmd-path' => '/path/to/gcloud',
9
- 'expiry-key' => '{.credential.token_expiry}',
10
- 'token-key' => '{.credential.access_token}' }
11
-
12
- creds = JSON.dump(
13
- 'credential' => {
14
- 'access_token' => '9A3A941836F2458175BE18AA1971EBBF47949B07',
15
- 'token_expiry' => '2019-04-12T15:02:51Z'
16
- }
17
- )
18
-
19
- st = Minitest::Mock.new
20
- st.expect(:success?, true)
21
-
22
- Open3.stub(:capture3, [creds, nil, st]) do
23
- assert_equal('9A3A941836F2458175BE18AA1971EBBF47949B07',
24
- Kubeclient::GCPCommandCredentials.token(opts))
25
- end
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- require_relative 'test_helper'
2
- require 'googleauth'
3
-
4
- # Unit tests for the ApplicationDefaultCredentials token provider
5
- class GoogleApplicationDefaultCredentialsTest < MiniTest::Test
6
- def test_token
7
- auth = Minitest::Mock.new
8
- auth.expect(:apply, nil, [{}])
9
- auth.expect(:access_token, 'valid_token')
10
-
11
- Google::Auth.stub(:get_application_default, auth) do
12
- assert_equal('valid_token', Kubeclient::GoogleApplicationDefaultCredentials.token)
13
- end
14
- end
15
- end