vsphere-automation-runtime 0.2.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.
@@ -0,0 +1,34 @@
1
+ # Copyright (c) 2018-2019 VMware, Inc. All Rights Reserved.
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ # DO NOT MODIFY. THIS CODE IS GENERATED. CHANGES WILL BE OVERWRITTEN.
5
+
6
+ # runtime - No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+
9
+ module VSphereAutomation
10
+ class ApiError < StandardError
11
+ attr_reader :code, :response_headers, :response_body
12
+
13
+ # Usage examples:
14
+ # ApiError.new
15
+ # ApiError.new("message")
16
+ # ApiError.new(:code => 500, :response_headers => {}, :response_body => "")
17
+ # ApiError.new(:code => 404, :message => "Not Found")
18
+ def initialize(arg = nil)
19
+ if arg.is_a? Hash
20
+ if arg.key?(:message) || arg.key?('message')
21
+ super(arg[:message] || arg['message'])
22
+ else
23
+ super arg
24
+ end
25
+
26
+ arg.each do |k, v|
27
+ instance_variable_set "@#{k}", v
28
+ end
29
+ else
30
+ super arg
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,212 @@
1
+ # Copyright (c) 2018-2019 VMware, Inc. All Rights Reserved.
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ # DO NOT MODIFY. THIS CODE IS GENERATED. CHANGES WILL BE OVERWRITTEN.
5
+
6
+ # runtime - No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+
9
+ require 'uri'
10
+
11
+ module VSphereAutomation
12
+ class Configuration
13
+ # Defines url scheme
14
+ attr_accessor :scheme
15
+
16
+ # Defines url host
17
+ attr_accessor :host
18
+
19
+ # Defines url base path
20
+ attr_accessor :base_path
21
+
22
+ # Defines API keys used with API Key authentications.
23
+ #
24
+ # @return [Hash] key: parameter name, value: parameter value (API key)
25
+ #
26
+ # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string)
27
+ # config.api_key['api_key'] = 'xxx'
28
+ attr_accessor :api_key
29
+
30
+ # Defines API key prefixes used with API Key authentications.
31
+ #
32
+ # @return [Hash] key: parameter name, value: API key prefix
33
+ #
34
+ # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers)
35
+ # config.api_key_prefix['api_key'] = 'Token'
36
+ attr_accessor :api_key_prefix
37
+
38
+ # Defines the username used with HTTP basic authentication.
39
+ #
40
+ # @return [String]
41
+ attr_accessor :username
42
+
43
+ # Defines the password used with HTTP basic authentication.
44
+ #
45
+ # @return [String]
46
+ attr_accessor :password
47
+
48
+ # Defines the access token (Bearer) used with OAuth2.
49
+ attr_accessor :access_token
50
+
51
+ # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response
52
+ # details will be logged with `logger.debug` (see the `logger` attribute).
53
+ # Default to false.
54
+ #
55
+ # @return [true, false]
56
+ attr_accessor :debugging
57
+
58
+ # Defines the logger used for debugging.
59
+ # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
60
+ #
61
+ # @return [#debug]
62
+ attr_accessor :logger
63
+
64
+ # Defines the temporary folder to store downloaded files
65
+ # (for API endpoints that have file response).
66
+ # Default to use `Tempfile`.
67
+ #
68
+ # @return [String]
69
+ attr_accessor :temp_folder_path
70
+
71
+ # The time limit for HTTP request in seconds.
72
+ # Default to 0 (never times out).
73
+ attr_accessor :timeout
74
+
75
+ # Set this to false to skip client side validation in the operation.
76
+ # Default to true.
77
+ # @return [true, false]
78
+ attr_accessor :client_side_validation
79
+
80
+ ### TLS/SSL setting
81
+ # Set this to false to skip verifying SSL certificate when calling API from https server.
82
+ # Default to true.
83
+ #
84
+ # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
85
+ #
86
+ # @return [true, false]
87
+ attr_accessor :verify_ssl
88
+
89
+ ### TLS/SSL setting
90
+ # Set this to false to skip verifying SSL host name
91
+ # Default to true.
92
+ #
93
+ # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
94
+ #
95
+ # @return [true, false]
96
+ attr_accessor :verify_ssl_host
97
+
98
+ ### TLS/SSL setting
99
+ # Set this to customize the certificate file to verify the peer.
100
+ #
101
+ # @return [String] the path to the certificate file
102
+ #
103
+ # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code:
104
+ # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145
105
+ attr_accessor :ssl_ca_cert
106
+
107
+ ### TLS/SSL setting
108
+ # Client certificate file (for client certificate)
109
+ attr_accessor :cert_file
110
+
111
+ ### TLS/SSL setting
112
+ # Client private key file (for client certificate)
113
+ attr_accessor :key_file
114
+
115
+ # Set this to customize parameters encoding of array parameter with multi collectionFormat.
116
+ # Default to nil.
117
+ #
118
+ # @see The params_encoding option of Ethon. Related source code:
119
+ # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
120
+ attr_accessor :params_encoding
121
+
122
+ attr_accessor :inject_format
123
+
124
+ attr_accessor :force_ending_format
125
+
126
+ def initialize
127
+ @scheme = 'https'
128
+ @host = '&lt;vcenter&gt;'
129
+ @base_path = '/rest'
130
+ @api_key = {}
131
+ @api_key_prefix = {}
132
+ @timeout = 0
133
+ @client_side_validation = true
134
+ @verify_ssl = true
135
+ @verify_ssl_host = true
136
+ @params_encoding = nil
137
+ @cert_file = nil
138
+ @key_file = nil
139
+ @debugging = false
140
+ @inject_format = false
141
+ @force_ending_format = false
142
+ @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
143
+
144
+ yield(self) if block_given?
145
+ end
146
+
147
+ # The default Configuration object.
148
+ def self.default
149
+ @@default ||= Configuration.new
150
+ end
151
+
152
+ def configure
153
+ yield(self) if block_given?
154
+ end
155
+
156
+ def scheme=(scheme)
157
+ # remove :// from scheme
158
+ @scheme = scheme.sub(/:\/\//, '')
159
+ end
160
+
161
+ def host=(host)
162
+ # remove http(s):// and anything after a slash
163
+ @host = host.sub(/https?:\/\//, '').split('/').first
164
+ end
165
+
166
+ def base_path=(base_path)
167
+ # Add leading and trailing slashes to base_path
168
+ @base_path = "/#{base_path}".gsub(/\/+/, '/')
169
+ @base_path = '' if @base_path == '/'
170
+ end
171
+
172
+ def base_url
173
+ url = "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '')
174
+ URI.encode(url)
175
+ end
176
+
177
+ # Gets API key (with prefix if set).
178
+ # @param [String] param_name the parameter name of API key auth
179
+ def api_key_with_prefix(param_name)
180
+ if @api_key_prefix[param_name]
181
+ "#{@api_key_prefix[param_name]} #{@api_key[param_name]}"
182
+ else
183
+ @api_key[param_name]
184
+ end
185
+ end
186
+
187
+ # Gets Basic Auth token string
188
+ def basic_auth_token
189
+ 'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
190
+ end
191
+
192
+ # Returns Auth Settings hash for api client.
193
+ def auth_settings
194
+ {
195
+ 'api_key' =>
196
+ {
197
+ type: 'api_key',
198
+ in: 'header',
199
+ key: 'vmware-api-session-id',
200
+ value: api_key_with_prefix('vmware-api-session-id')
201
+ },
202
+ 'basic_auth' =>
203
+ {
204
+ type: 'basic',
205
+ in: 'header',
206
+ key: 'Authorization',
207
+ value: basic_auth_token
208
+ },
209
+ }
210
+ end
211
+ end
212
+ end
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2018-2019 VMware, Inc. All Rights Reserved.
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ # DO NOT MODIFY. THIS CODE IS GENERATED. CHANGES WILL BE OVERWRITTEN.
5
+
6
+ # runtime - No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+
9
+ module VSphereAutomation
10
+ module Runtime
11
+ VERSION = '0.2.0'
12
+ end
13
+ end
@@ -0,0 +1,222 @@
1
+ # Copyright (c) 2018-2019 VMware, Inc. All Rights Reserved.
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ # DO NOT MODIFY. THIS CODE IS GENERATED. CHANGES WILL BE OVERWRITTEN.
5
+
6
+ # runtime - No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+
9
+ require 'spec_helper'
10
+
11
+ describe VSphereAutomation::ApiClient do
12
+ context 'initialization' do
13
+ context 'URL stuff' do
14
+ context 'host' do
15
+ it 'removes http from host' do
16
+ VSphereAutomation.configure { |c| c.host = 'http://example.com' }
17
+ expect(VSphereAutomation::Configuration.default.host).to eq('example.com')
18
+ end
19
+
20
+ it 'removes https from host' do
21
+ VSphereAutomation.configure { |c| c.host = 'https://wookiee.com' }
22
+ expect(VSphereAutomation::ApiClient.default.config.host).to eq('wookiee.com')
23
+ end
24
+
25
+ it 'removes trailing path from host' do
26
+ VSphereAutomation.configure { |c| c.host = 'hobo.com/v4' }
27
+ expect(VSphereAutomation::Configuration.default.host).to eq('hobo.com')
28
+ end
29
+ end
30
+
31
+ context 'base_path' do
32
+ it "prepends a slash to base_path" do
33
+ VSphereAutomation.configure { |c| c.base_path = 'v4/dog' }
34
+ expect(VSphereAutomation::Configuration.default.base_path).to eq('/v4/dog')
35
+ end
36
+
37
+ it "doesn't prepend a slash if one is already there" do
38
+ VSphereAutomation.configure { |c| c.base_path = '/v4/dog' }
39
+ expect(VSphereAutomation::Configuration.default.base_path).to eq('/v4/dog')
40
+ end
41
+
42
+ it "ends up as a blank string if nil" do
43
+ VSphereAutomation.configure { |c| c.base_path = nil }
44
+ expect(VSphereAutomation::Configuration.default.base_path).to eq('')
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ describe 'params_encoding in #build_request' do
51
+ let(:config) { VSphereAutomation::Configuration.new }
52
+ let(:api_client) { VSphereAutomation::ApiClient.new(config) }
53
+
54
+ it 'defaults to nil' do
55
+ expect(VSphereAutomation::Configuration.default.params_encoding).to eq(nil)
56
+ expect(config.params_encoding).to eq(nil)
57
+
58
+ request = api_client.build_request(:get, '/test')
59
+ expect(request.options[:params_encoding]).to eq(nil)
60
+ end
61
+
62
+ it 'can be customized' do
63
+ config.params_encoding = :multi
64
+ request = api_client.build_request(:get, '/test')
65
+ expect(request.options[:params_encoding]).to eq(:multi)
66
+ end
67
+ end
68
+
69
+ describe 'timeout in #build_request' do
70
+ let(:config) { VSphereAutomation::Configuration.new }
71
+ let(:api_client) { VSphereAutomation::ApiClient.new(config) }
72
+
73
+ it 'defaults to 0' do
74
+ expect(VSphereAutomation::Configuration.default.timeout).to eq(0)
75
+ expect(config.timeout).to eq(0)
76
+
77
+ request = api_client.build_request(:get, '/test')
78
+ expect(request.options[:timeout]).to eq(0)
79
+ end
80
+
81
+ it 'can be customized' do
82
+ config.timeout = 100
83
+ request = api_client.build_request(:get, '/test')
84
+ expect(request.options[:timeout]).to eq(100)
85
+ end
86
+ end
87
+
88
+ describe '#deserialize' do
89
+ it "handles Array<Integer>" do
90
+ api_client = VSphereAutomation::ApiClient.new
91
+ headers = { 'Content-Type' => 'application/json' }
92
+ response = double('response', headers: headers, body: '[12, 34]')
93
+ data = api_client.deserialize(response, 'Array<Integer>')
94
+ expect(data).to be_instance_of(Array)
95
+ expect(data).to eq([12, 34])
96
+ end
97
+
98
+ it 'handles Array<Array<Integer>>' do
99
+ api_client = VSphereAutomation::ApiClient.new
100
+ headers = { 'Content-Type' => 'application/json' }
101
+ response = double('response', headers: headers, body: '[[12, 34], [56]]')
102
+ data = api_client.deserialize(response, 'Array<Array<Integer>>')
103
+ expect(data).to be_instance_of(Array)
104
+ expect(data).to eq([[12, 34], [56]])
105
+ end
106
+
107
+ it 'handles Hash<String, String>' do
108
+ api_client = VSphereAutomation::ApiClient.new
109
+ headers = { 'Content-Type' => 'application/json' }
110
+ response = double('response', headers: headers, body: '{"message": "Hello"}')
111
+ data = api_client.deserialize(response, 'Hash<String, String>')
112
+ expect(data).to be_instance_of(Hash)
113
+ expect(data).to eq(:message => 'Hello')
114
+ end
115
+ end
116
+
117
+ describe "#object_to_hash" do
118
+ it 'ignores nils and includes empty arrays' do
119
+ # uncomment below to test object_to_hash for model
120
+ # api_client = VSphereAutomation::ApiClient.new
121
+ # _model = VSphereAutomation::ModelName.new
122
+ # update the model attribute below
123
+ # _model.id = 1
124
+ # update the expected value (hash) below
125
+ # expected = {id: 1, name: '', tags: []}
126
+ # expect(api_client.object_to_hash(_model)).to eq(expected)
127
+ end
128
+ end
129
+
130
+ describe '#build_collection_param' do
131
+ let(:param) { ['aa', 'bb', 'cc'] }
132
+ let(:api_client) { VSphereAutomation::ApiClient.new }
133
+
134
+ it 'works for csv' do
135
+ expect(api_client.build_collection_param(param, :csv)).to eq('aa,bb,cc')
136
+ end
137
+
138
+ it 'works for ssv' do
139
+ expect(api_client.build_collection_param(param, :ssv)).to eq('aa bb cc')
140
+ end
141
+
142
+ it 'works for tsv' do
143
+ expect(api_client.build_collection_param(param, :tsv)).to eq("aa\tbb\tcc")
144
+ end
145
+
146
+ it 'works for pipes' do
147
+ expect(api_client.build_collection_param(param, :pipes)).to eq('aa|bb|cc')
148
+ end
149
+
150
+ it 'works for multi' do
151
+ expect(api_client.build_collection_param(param, :multi)).to eq(['aa', 'bb', 'cc'])
152
+ end
153
+
154
+ it 'fails for invalid collection format' do
155
+ expect(proc { api_client.build_collection_param(param, :INVALID) }).to raise_error(RuntimeError, 'unknown collection format: :INVALID')
156
+ end
157
+ end
158
+
159
+ describe '#json_mime?' do
160
+ let(:api_client) { VSphereAutomation::ApiClient.new }
161
+
162
+ it 'works' do
163
+ expect(api_client.json_mime?(nil)).to eq false
164
+ expect(api_client.json_mime?('')).to eq false
165
+
166
+ expect(api_client.json_mime?('application/json')).to eq true
167
+ expect(api_client.json_mime?('application/json; charset=UTF8')).to eq true
168
+ expect(api_client.json_mime?('APPLICATION/JSON')).to eq true
169
+
170
+ expect(api_client.json_mime?('application/xml')).to eq false
171
+ expect(api_client.json_mime?('text/plain')).to eq false
172
+ expect(api_client.json_mime?('application/jsonp')).to eq false
173
+ end
174
+ end
175
+
176
+ describe '#select_header_accept' do
177
+ let(:api_client) { VSphereAutomation::ApiClient.new }
178
+
179
+ it 'works' do
180
+ expect(api_client.select_header_accept(nil)).to be_nil
181
+ expect(api_client.select_header_accept([])).to be_nil
182
+
183
+ expect(api_client.select_header_accept(['application/json'])).to eq('application/json')
184
+ expect(api_client.select_header_accept(['application/xml', 'application/json; charset=UTF8'])).to eq('application/json; charset=UTF8')
185
+ expect(api_client.select_header_accept(['APPLICATION/JSON', 'text/html'])).to eq('APPLICATION/JSON')
186
+
187
+ expect(api_client.select_header_accept(['application/xml'])).to eq('application/xml')
188
+ expect(api_client.select_header_accept(['text/html', 'application/xml'])).to eq('text/html,application/xml')
189
+ end
190
+ end
191
+
192
+ describe '#select_header_content_type' do
193
+ let(:api_client) { VSphereAutomation::ApiClient.new }
194
+
195
+ it 'works' do
196
+ expect(api_client.select_header_content_type(nil)).to eq('application/json')
197
+ expect(api_client.select_header_content_type([])).to eq('application/json')
198
+
199
+ expect(api_client.select_header_content_type(['application/json'])).to eq('application/json')
200
+ expect(api_client.select_header_content_type(['application/xml', 'application/json; charset=UTF8'])).to eq('application/json; charset=UTF8')
201
+ expect(api_client.select_header_content_type(['APPLICATION/JSON', 'text/html'])).to eq('APPLICATION/JSON')
202
+ expect(api_client.select_header_content_type(['application/xml'])).to eq('application/xml')
203
+ expect(api_client.select_header_content_type(['text/plain', 'application/xml'])).to eq('text/plain')
204
+ end
205
+ end
206
+
207
+ describe '#sanitize_filename' do
208
+ let(:api_client) { VSphereAutomation::ApiClient.new }
209
+
210
+ it 'works' do
211
+ expect(api_client.sanitize_filename('sun')).to eq('sun')
212
+ expect(api_client.sanitize_filename('sun.gif')).to eq('sun.gif')
213
+ expect(api_client.sanitize_filename('../sun.gif')).to eq('sun.gif')
214
+ expect(api_client.sanitize_filename('/var/tmp/sun.gif')).to eq('sun.gif')
215
+ expect(api_client.sanitize_filename('./sun.gif')).to eq('sun.gif')
216
+ expect(api_client.sanitize_filename('..\sun.gif')).to eq('sun.gif')
217
+ expect(api_client.sanitize_filename('\var\tmp\sun.gif')).to eq('sun.gif')
218
+ expect(api_client.sanitize_filename('c:\var\tmp\sun.gif')).to eq('sun.gif')
219
+ expect(api_client.sanitize_filename('.\sun.gif')).to eq('sun.gif')
220
+ end
221
+ end
222
+ end