occi 3.0.0 → 3.1.0.beta.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.
@@ -0,0 +1,82 @@
1
+ require 'openssl'
2
+
3
+ if defined? JRUBY_VERSION
4
+ require 'java'
5
+ end
6
+
7
+ module Occi
8
+ module Api
9
+ module Client
10
+
11
+ class AuthnUtils
12
+ # Reads credentials from a PKCS#12 compliant file. Returns
13
+ # X.509 certificate and decrypted private key in PEM
14
+ # formatted string.
15
+ #
16
+ # @example
17
+ # extract_pem_from_pkcs12 "~/.globus/usercert.p12", "123456"
18
+ # # => #<String>
19
+ #
20
+ # @param [String] Path to a PKCS#12 file with credentials
21
+ # @param [String] Password needed to unlock the PKCS#12 file
22
+ # @return [String] Decrypted credentials in a PEM formatted string
23
+ def self.extract_pem_from_pkcs12(path_to_p12_file, p12_password)
24
+ # decode certificate and its private key
25
+ pem_from_pkcs12 = ""
26
+ if defined? JRUBY_VERSION
27
+ # Java-based Ruby, read PKCS12 manually
28
+ # using KeyStore
29
+ keystore = Java::JavaSecurity::KeyStore.getInstance("PKCS12")
30
+ p12_input_stream = Java::JavaIo::FileInputStream.new(path_to_p12_file)
31
+ pass_char_array = Java::JavaLang::String.new(p12_password).to_char_array
32
+
33
+ # load and unlock PKCS#12 store
34
+ keystore.load p12_input_stream, pass_char_array
35
+
36
+ # read the first certificate and PK
37
+ cert = keystore.getCertificate("1")
38
+ pk = keystore.getKey("1", pass_char_array)
39
+
40
+ pem_from_pkcs12 << "-----BEGIN CERTIFICATE-----\n"
41
+ pem_from_pkcs12 << Java::JavaxXmlBind::DatatypeConverter.printBase64Binary(cert.getEncoded())
42
+ pem_from_pkcs12 << "\n-----END CERTIFICATE-----"
43
+
44
+ pem_from_pkcs12 << "\n"
45
+
46
+ pem_from_pkcs12 << "-----BEGIN PRIVATE KEY-----\n"
47
+ pem_from_pkcs12 << Java::JavaxXmlBind::DatatypeConverter.printBase64Binary(pk.getEncoded())
48
+ pem_from_pkcs12 << "\n-----END PRIVATE KEY-----"
49
+ else
50
+ # C-based Ruby, use OpenSSL::PKCS12
51
+ pkcs12 = OpenSSL::PKCS12.new(
52
+ File.open(
53
+ path_to_p12_file,
54
+ 'rb'
55
+ ),
56
+ p12_password
57
+ )
58
+
59
+ # store cert and private key in a single PEM formatted string
60
+ pem_from_pkcs12 << pkcs12.certificate.to_pem << pkcs12.key.to_pem
61
+ end
62
+
63
+ pem_from_pkcs12
64
+ end
65
+
66
+ # Reads X.509 certificates from a file to an array.
67
+ #
68
+ # @example
69
+ # certs_to_file_ary "~/.globus/usercert.pem"
70
+ # # => [#<String>, #<String>, ...]
71
+ #
72
+ # @param [String] Path to a PEM file containing certificates
73
+ # @return [Array<String>] An array of read certificates
74
+ def self.certs_to_file_ary(ca_file)
75
+ # TODO: read and separate multiple certificates
76
+ [] << File.open(ca_file).read
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -1,6 +1,6 @@
1
1
  # a bunch of OCCI client helpers for bin/occi
2
2
 
3
- def helper_list(options)
3
+ def helper_list(options, output = nil)
4
4
  found = []
5
5
 
6
6
  if resource_types.include? options.resource
@@ -10,17 +10,23 @@ def helper_list(options)
10
10
  Occi::Log.debug "#{options.resource} is a mixin type."
11
11
  found = mixins options.resource
12
12
  else
13
- Occi::Log.debug "I have no idea what #{options.resource} is ..."
14
- puts "Unknown resource #{options.resource}, there is nothing to list here!"
13
+ Occi::Log.warn "I have no idea what #{options.resource} is ..."
14
+ raise "Unknown resource #{options.resource}, there is nothing to list here!"
15
15
  end
16
16
 
17
- found
17
+ return found if output.nil?
18
+
19
+ if Occi::Bin::ResourceOutputFactory.allowed_resource_types.include? options.resource.to_sym
20
+ puts output.format(found, :locations, options.resource.to_sym)
21
+ else
22
+ Occi::Log.warn "Not printing, the resource type is not supported!"
23
+ end
18
24
  end
19
25
 
20
- def helper_describe(options)
26
+ def helper_describe(options, output = nil)
21
27
  found = []
22
28
 
23
- if resource_types.include? options.resource or options.resource.start_with? options.endpoint
29
+ if resource_types.include?(options.resource) || options.resource.start_with?(options.endpoint) || options.resource.start_with?('/')
24
30
  Occi::Log.debug "#{options.resource} is a resource type or an actual resource."
25
31
 
26
32
  found = describe(options.resource)
@@ -37,15 +43,37 @@ def helper_describe(options)
37
43
  mxn_type,mxn = options.resource.split('#')
38
44
  found << mixin(mxn, mxn_type, true)
39
45
  else
40
- Occi::Log.debug "I have no idea what #{options.resource} is ..."
46
+ Occi::Log.warn "I have no idea what #{options.resource} is ..."
47
+ raise "Unknown resource #{options.resource}, there is nothing to describe here!"
48
+ end
49
+
50
+ return found if output.nil?
41
51
 
42
- puts "Unknown resource #{options.resource}, there is nothing to describe here!"
52
+ if options.resource.start_with? options.endpoint
53
+ # resource contains full endpoint URI
54
+ # e.g., http://localhost:3300/network/adfgadf-daf5a6df4afadf-adfad65f4ad
55
+ resource_type = options.resource.split('/')[3].to_sym
56
+ elsif options.resource.start_with? '/'
57
+ # resource contains a path relative to endpoint URI
58
+ # e.g., /network/adfgadf-daf5a6df4afadf-adfad65f4ad
59
+ resource_type = options.resource.split('/')[1].to_sym
60
+ elsif mixin_types.include? options.resource.split('#').first
61
+ # resource contains a mixin with a type
62
+ # e.g., os_tpl#debian6
63
+ resource_type = options.resource.split('#').first.to_sym
64
+ else
65
+ # resource probably contains RAW resource_type
66
+ resource_type = options.resource.to_sym
43
67
  end
44
68
 
45
- found
69
+ if Occi::Bin::ResourceOutputFactory.allowed_resource_types.include? resource_type
70
+ puts output.format(found, :resources, resource_type)
71
+ else
72
+ Occi::Log.warn "Not printing, the resource type [#{resource_type.to_s}] is not supported!"
73
+ end
46
74
  end
47
75
 
48
- def helper_create(options)
76
+ def helper_create(options, output = nil)
49
77
  location = nil
50
78
 
51
79
  if resource_types.include? options.resource
@@ -55,37 +83,67 @@ def helper_create(options)
55
83
  res = resource options.resource
56
84
 
57
85
  Occi::Log.debug "Creating #{options.resource}:\n#{res.inspect}"
58
- Occi::Log.debug "with mixins:#{options.mixin}"
59
86
 
60
- options.mixin.keys.each do |type|
61
- Occi::Log.debug "Adding mixins of type #{type} to #{options.resource}"
62
- options.mixin[type].each do |name|
63
- mxn = mixin name, type
87
+ if options.links
88
+ Occi::Log.debug "with links: #{options.links}"
89
+
90
+ options.links.each do |link|
91
+ link = options.endpoint.chomp('/') + link unless link.start_with? options.endpoint
92
+
93
+ if link.include? "/storage/"
94
+ Occi::Log.debug "Adding storagelink to #{options.resource}"
95
+ res.storagelink link
96
+ elsif link.include? "/network/"
97
+ Occi::Log.debug "Adding networkinterface to #{options.resource}"
98
+ res.networkinterface link
99
+ else
100
+ raise "Unknown link type #{link}, stopping here!"
101
+ end
102
+ end
103
+ end
104
+
105
+ if options.mixins
106
+ Occi::Log.debug "with mixins: #{options.mixins}"
107
+
108
+ options.mixins.keys.each do |type|
109
+ Occi::Log.debug "Adding mixins of type #{type} to #{options.resource}"
64
110
 
65
- raise "Unknown mixin #{type}##{name}, stopping here!" if mxn.nil?
66
- Occi::Log.debug "Adding mixin #{mxn} to #{options.resource}"
67
- res.mixins << mxn
111
+ options.mixins[type].each do |name|
112
+ mxn = mixin name, type
113
+
114
+ raise "Unknown mixin #{type}##{name}, stopping here!" if mxn.nil?
115
+ Occi::Log.debug "Adding mixin #{mxn} to #{options.resource}"
116
+ res.mixins << mxn
117
+ end
68
118
  end
69
119
  end
70
120
 
71
121
  #TODO: set other attributes
72
- res.title = options.resource_title
122
+ res.title = options.attributes[:title]
73
123
 
74
124
  Occi::Log.debug "Creating #{options.resource}:\n#{res.inspect}"
75
125
 
76
126
  location = create res
77
127
  else
78
- Occi::Log.debug "I have no idea what #{options.resource} is ..."
79
- puts "Unknown resource #{options.resource}, there is nothing to create here!"
128
+ Occi::Log.warn "I have no idea what #{options.resource} is ..."
129
+ raise "Unknown resource #{options.resource}, there is nothing to create here!"
80
130
  end
81
131
 
82
- location
132
+ return location if output.nil?
133
+
134
+ puts location
83
135
  end
84
136
 
85
- def helper_delete(options)
86
- delete options.resource
137
+ def helper_delete(options, output = nil)
138
+ if delete(options.resource)
139
+ Occi::Log.info "Resource #{options.resource} successfully removed!"
140
+ else
141
+ raise "Failed to remove resource #{options.resource}!"
142
+ end
143
+
144
+ true
87
145
  end
88
146
 
89
- def helper_trigger(options)
147
+ def helper_trigger(options, output = nil)
90
148
  raise "Not yet implemented!"
91
- end
149
+ end
@@ -1,5 +1,7 @@
1
1
  require 'ostruct'
2
2
  require 'optparse'
3
+ require 'uri'
4
+
3
5
  require 'occi/bin/resource_output_factory'
4
6
 
5
7
  module Occi
@@ -12,7 +14,9 @@ module Occi
12
14
  ACTIONS = [:list, :describe, :create, :delete, :trigger].freeze
13
15
  LOG_OUTPUTS = [:stdout, :stderr].freeze
14
16
 
15
- def self.parse(args)
17
+ def self.parse(args, test_env = false)
18
+
19
+ @@quiet = test_env
16
20
 
17
21
  options = OpenStruct.new
18
22
 
@@ -39,13 +43,31 @@ module Occi
39
43
  options.auth[:proxy_ca] = nil
40
44
 
41
45
  options.output_format = :plain
46
+
47
+ options.mixins = nil
48
+ options.links = nil
49
+ options.attributes = nil
50
+ options.context_vars = nil
42
51
 
43
52
  # TODO: change media type back to occi+json after the rOCCI-server update
44
53
  #options.media_type = "application/occi+json"
45
54
  options.media_type = "text/plain,text/occi"
46
55
 
47
56
  opts = OptionParser.new do |opts|
48
- opts.banner = "Usage: occi [OPTIONS]"
57
+ opts.banner = %{Usage: occi [OPTIONS]
58
+
59
+ Examples:
60
+ occi --interactive --endpoint https://localhost:3300/ --auth x509
61
+
62
+ occi --endpoint https://localhost:3300/ --action list --resource os_tpl --auth x509
63
+
64
+ occi --endpoint https://localhost:3300/ --action list --resource resource_tpl --auth x509
65
+
66
+ occi --endpoint https://localhost:3300/ --action describe --resource os_tpl#debian6 --auth x509
67
+
68
+ occi --endpoint https://localhost:3300/ --action create --resource compute --mixin os_tpl#debian6 --mixin resource_tpl#small --attributes title="My rOCCI VM" --auth x509
69
+
70
+ occi --endpoint https://localhost:3300/ --action delete --resource /compute/65sd4f654sf65g4-s5fg65sfg465sfg-sf65g46sf5g4sdfg --auth x509}
49
71
 
50
72
  opts.separator ""
51
73
  opts.separator "Options:"
@@ -60,7 +82,7 @@ module Occi
60
82
  "--endpoint URI",
61
83
  String,
62
84
  "OCCI server URI, defaults to '#{options.endpoint}'") do |endpoint|
63
- options.endpoint = endpoint
85
+ options.endpoint = URI(endpoint).to_s
64
86
  end
65
87
 
66
88
  opts.on("-n",
@@ -80,36 +102,56 @@ module Occi
80
102
  opts.on("-p",
81
103
  "--password PASSWORD",
82
104
  String,
83
- "Password for basic, digest and x509 authentication or an auth. token for KeyStone") do |password|
105
+ "Password for basic, digest and x509 authentication or an auth. token from OS Keystone") do |password|
84
106
  options.auth[:password] = password
85
107
  options.auth[:user_cert_password] = password
86
108
  options.auth[:token] = password
87
109
  end
88
110
 
89
111
  opts.on("-c",
90
- "--ca-path PATH", String, "Path to CA certificates directory, defaults to '#{options.auth[:ca_path]}'") do |ca_path|
112
+ "--ca-path PATH",
113
+ String,
114
+ "Path to CA certificates directory, defaults to '#{options.auth[:ca_path]}'") do |ca_path|
115
+ raise ArgumentError, "Path specified in --ca-path is not a directory!" unless File.directory? ca_path
116
+ raise ArgumentError, "Path specified in --ca-path is not readable!" unless File.readable? ca_path
117
+
91
118
  options.auth[:ca_path] = ca_path
92
119
  end
93
120
 
94
121
  opts.on("-f",
95
- "--ca-file PATH", String, "Path to CA certificates in a file") do |ca_file|
122
+ "--ca-file PATH",
123
+ String,
124
+ "Path to CA certificates in a file") do |ca_file|
125
+ raise ArgumentError, "File specified in --ca-file is not a file!" unless File.file? ca_file
126
+ raise ArgumentError, "File specified in --ca-file is not readable!" unless File.readable? ca_file
127
+
96
128
  options.auth[:ca_file] = ca_file
97
129
  end
98
130
 
99
131
  opts.on("-F",
100
- "--filter CATEGORY", String, "Category type identifier to filter categories from model, must be used together with the -m option") do |filter|
132
+ "--filter CATEGORY",
133
+ String,
134
+ "Category type identifier to filter categories from model, must be used together with the -m option") do |filter|
101
135
  options.filter = filter
102
136
  end
103
137
 
104
138
  opts.on("-x",
105
- "--user-cred PATH",
139
+ "--user-cred FILE",
106
140
  String,
107
141
  "Path to user's x509 credentials, defaults to '#{options.auth[:user_cert]}'") do |user_cred|
142
+ raise ArgumentError, "File specified in --user-cred is not a file!" unless File.file? user_cred
143
+ raise ArgumentError, "File specified in --user-cred is not readable!" unless File.readable? user_cred
144
+
108
145
  options.auth[:user_cert] = user_cred
109
146
  end
110
147
 
111
148
  opts.on("-X",
112
- "--proxy-ca PATH", String, "Path to a file with GSI proxy's CA certificate(s)") do |proxy_ca|
149
+ "--proxy-ca FILE",
150
+ String,
151
+ "Path to a file with GSI proxy's CA certificate(s)") do |proxy_ca|
152
+ raise ArgumentError, "File specified in --proxy-ca is not a file!" unless File.file? proxy_ca
153
+ raise ArgumentError, "File specified in --proxy-ca is not readable!" unless File.readable? proxy_ca
154
+
113
155
  options.auth[:proxy_ca] = proxy_ca
114
156
  end
115
157
 
@@ -128,10 +170,31 @@ module Occi
128
170
  end
129
171
 
130
172
  opts.on("-t",
131
- "--resource-title TITLE",
132
- String,
133
- "Resource title for new resources") do |resource_title|
134
- options.resource_title = resource_title
173
+ "--attributes ATTRS",
174
+ Array,
175
+ "Comma separated attributes for new resources such as title=\"Name\", required") do |attributes|
176
+ options.attributes = {}
177
+
178
+ attributes.each do |attribute|
179
+ ary = /^(.+?)=(.+)$/.match(attribute).to_a.drop 1
180
+ raise ArgumentError, "Attributes must always contain ATTR=VALUE pairs!" if ary.length != 2
181
+
182
+ options.attributes[ary[0].to_sym] = ary[1]
183
+ end
184
+ end
185
+
186
+ opts.on("-T",
187
+ "--context CTX_VARS",
188
+ Array,
189
+ "Comma separated context variables for new compute resources such as SSH_KEY=\"ssh-rsa dfsdf...adfdf== user@localhost\"") do |context|
190
+ options.context_vars = {}
191
+
192
+ context.each do |ctx|
193
+ ary = /^(.+?)=(.+)$/.match(ctx).to_a.drop 1
194
+ raise ArgumentError, "Context variables must always contain ATTR=VALUE pairs!" if ary.length != 2
195
+
196
+ options.context_vars[ary[0].to_sym] = ary[1]
197
+ end
135
198
  end
136
199
 
137
200
  opts.on("-a",
@@ -149,9 +212,21 @@ module Occi
149
212
 
150
213
  raise "Unknown mixin format! Use TYPE#NAME!" unless parts.length == 2
151
214
 
152
- options.mixin = {} if options.mixin.nil?
153
- options.mixin[parts[0]] = [] if options.mixin[parts[0]].nil?
154
- options.mixin[parts[0]] << parts[1]
215
+ options.mixins = {} if options.mixins.nil?
216
+ options.mixins[parts[0]] = [] if options.mixins[parts[0]].nil?
217
+ options.mixins[parts[0]] << parts[1]
218
+ end
219
+
220
+ opts.on("-j",
221
+ "--link URI",
222
+ String,
223
+ "Link specified resource to the resource being created, only for action CREATE and resource COMPUTE") do |link|
224
+ link_relative_path = URI(link).path
225
+
226
+ raise ArgumentError, "Specified link URI is not valid!" unless link_relative_path.start_with? '/'
227
+
228
+ options.links = [] if options.links.nil?
229
+ options.links << link_relative_path
155
230
  end
156
231
 
157
232
  opts.on("-g",
@@ -198,68 +273,111 @@ module Occi
198
273
  opts.on_tail("-h",
199
274
  "--help",
200
275
  "Show this message") do
201
- puts opts
202
- exit!(true)
276
+ if @@quiet
277
+ exit true
278
+ else
279
+ puts opts
280
+ exit! true
281
+ end
203
282
  end
204
283
 
205
284
  opts.on_tail("-v",
206
285
  "--version",
207
286
  "Show version") do
208
- puts Occi::VERSION
209
- exit!(true)
287
+ if @@quiet
288
+ exit true
289
+ else
290
+ puts Occi::VERSION
291
+ exit! true
292
+ end
210
293
  end
211
-
212
294
  end
213
295
 
214
296
  begin
215
297
  opts.parse!(args)
216
298
  rescue Exception => ex
217
- puts ex.message.capitalize
218
- puts opts
219
- exit!
299
+ if @@quiet
300
+ exit false
301
+ else
302
+ puts ex.message.capitalize
303
+ puts opts
304
+ exit!
305
+ end
220
306
  end
221
307
 
222
- if options.interactive && options.dump_model
223
- puts "You cannot use '--dump-model' and '--interactive' at the same time!"
224
- puts opts
308
+ check_restrictions options, opts
309
+
310
+ options
311
+ end
312
+
313
+ private
225
314
 
226
- exit!
315
+ def self.check_restrictions(options, opts)
316
+ if options.interactive && options.dump_model
317
+ if @@quiet
318
+ exit false
319
+ else
320
+ puts "You cannot use '--dump-model' and '--interactive' at the same time!"
321
+ puts opts
322
+ exit!
323
+ end
227
324
  end
228
325
 
229
326
  if !options.dump_model && options.filter
230
- puts "You cannot use '--filter' without '--dump-model'!"
231
- puts opts
232
-
233
- exit!
327
+ if @@quiet
328
+ exit false
329
+ else
330
+ puts "You cannot use '--filter' without '--dump-model'!"
331
+ puts opts
332
+ exit!
333
+ end
234
334
  end
235
335
 
236
- if !(options.interactive or options.dump_model)
237
- mandatory = []
336
+ return if options.interactive || options.dump_model
238
337
 
239
- if options.action == :trigger
240
- mandatory << :trigger_action
241
- end
338
+ mandatory = []
339
+
340
+ if options.action == :trigger
341
+ mandatory << :trigger_action
342
+ end
242
343
 
243
- if options.action == :create
244
- mandatory << :mixin << :resource_title
344
+ if options.action == :create
345
+ if !options.links.nil?
346
+ mandatory << :links
347
+ else
348
+ mandatory << :mixins
245
349
  end
246
350
 
247
- mandatory.concat [:resource, :action]
248
-
249
- options_hash = options.marshal_dump
351
+ mandatory << :attributes
352
+ check_attrs = true
353
+ end
354
+
355
+ mandatory.concat [:resource, :action]
356
+
357
+ check_hash options, mandatory, opts
250
358
 
251
- missing = mandatory.select{ |param| options_hash[param].nil? }
252
- if not missing.empty?
359
+ if check_attrs
360
+ mandatory = [:title]
361
+ check_hash options.attributes, mandatory, opts
362
+ end
363
+ end
364
+
365
+ def self.check_hash(hash, mandatory, opts)
366
+ if !hash.is_a? Hash
367
+ hash = hash.marshal_dump
368
+ end
369
+
370
+ missing = mandatory.select{ |param| hash[param].nil? }
371
+ if !missing.empty?
372
+ if @@quiet
373
+ exit false
374
+ else
253
375
  puts "Missing required arguments: #{missing.join(', ')}"
254
376
  puts opts
255
-
256
377
  exit!
257
378
  end
258
379
  end
259
-
260
- options
261
380
  end
262
-
263
381
  end
264
382
 
265
383
  end
data/lib/occi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Occi
2
- VERSION = "3.0.0" unless defined?(::Occi::VERSION)
2
+ VERSION = "3.1.0.beta.1" unless defined?(::Occi::VERSION)
3
3
  end
data/occi.gemspec CHANGED
@@ -39,7 +39,7 @@ Gem::Specification.new do |gem|
39
39
  gem.add_development_dependency "yard-rspec"
40
40
  gem.add_development_dependency "yard-cucumber"
41
41
  gem.add_development_dependency "rspec-http"
42
- #gem.add_development_dependency "vcr"
42
+ gem.add_development_dependency "rubygems-tasks"
43
43
  gem.add_development_dependency "webmock"
44
44
 
45
45
  gem.required_ruby_version = ">= 1.8.7"
@@ -23,9 +23,12 @@ module Occi
23
23
 
24
24
  =begin
25
25
  before(:all) do
26
- @client = Occi::Api::Client::ClientAmqp.new("http://localhost:9292/", auth_options = { :type => "none" },
27
- log_options = { :out => STDERR, :level => Occi::Log::WARN, :logger => nil },
28
- media_type = "application/occi+json")
26
+ @client = Occi::Api::Client::ClientAmqp.new({
27
+ :endpoint => "http://localhost:9292/",
28
+ :auth => { :type => "none" },
29
+ :log => { :out => STDERR, :level => Occi::Log::WARN, :logger => nil },
30
+ :media_type => "application/occi+json"
31
+ })
29
32
  end
30
33
 
31
34
  it "initialize and connect client" do
@@ -11,14 +11,14 @@ module Occi
11
11
  context "using media type text/plain" do
12
12
 
13
13
  before(:each) do
14
- @client = Occi::Api::Client::ClientHttp.new(
15
- 'https://localhost:3300',
16
- { :type => "none" },
17
- { :out => "/dev/null",
18
- :level => Occi::Log::DEBUG },
19
- true,
20
- "text/plain,text/occi"
21
- )
14
+ @client = Occi::Api::Client::ClientHttp.new({
15
+ :endpoint => 'https://localhost:3300',
16
+ :auth => { :type => "none" },
17
+ :log => { :out => "/dev/null",
18
+ :level => Occi::Log::DEBUG },
19
+ :auto_connect => true,
20
+ :media_type => "text/plain,text/occi"
21
+ })
22
22
  end
23
23
 
24
24
  after(:each) do
@@ -189,14 +189,14 @@ module Occi
189
189
  context "using media type application/occi+json" do
190
190
 
191
191
  before(:each) do
192
- #@client = Occi::Api::ClientHttp.new(
193
- # 'https://localhost:3300',
194
- # { :type => "none" },
195
- # { :out => "/dev/null",
196
- # :level => Occi::Log::DEBUG },
197
- # true,
198
- # "application/occi+json"
199
- #)
192
+ #@client = Occi::Api::ClientHttp.new({
193
+ # :endpoint => 'https://localhost:3300',
194
+ # :auth => { :type => "none" },
195
+ # :log => { :out => "/dev/null",
196
+ # :level => Occi::Log::DEBUG },
197
+ # :auto_connect => true,
198
+ # :media_type => "application/occi+json"
199
+ #})
200
200
  end
201
201
 
202
202
  it "establishes connection"