azure 0.6.3 → 0.6.4

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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.txt +7 -0
  3. data/README.md +52 -35
  4. data/lib/azure/base_management/management_http_request.rb +1 -1
  5. data/lib/azure/cloud_service_management/cloud_service.rb +1 -1
  6. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +8 -10
  7. data/lib/azure/cloud_service_management/serialization.rb +9 -8
  8. data/lib/azure/storage_management/storage_management_service.rb +2 -2
  9. data/lib/azure/version.rb +1 -1
  10. data/lib/azure/virtual_machine_image_management/serialization.rb +4 -6
  11. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +0 -2
  12. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +0 -2
  13. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +4 -9
  14. data/lib/azure/virtual_machine_management/serialization.rb +19 -4
  15. data/lib/azure/virtual_machine_management/virtual_machine.rb +1 -0
  16. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +118 -68
  17. data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
  18. data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
  19. data/test/integration/vm/VM_Create_test.rb +56 -10
  20. data/test/integration/vm/VM_Operations_test.rb +3 -4
  21. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +30 -30
  22. data/test/unit/cloud_service_management/serialization_test.rb +20 -20
  23. data/test/unit/virtual_machine_image_management/serialization_test.rb +6 -6
  24. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +20 -20
  25. data/test/unit/virtual_machine_management/serialization_test.rb +26 -14
  26. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +80 -75
  27. metadata +4 -2
@@ -120,12 +120,16 @@ describe Azure::VirtualMachineManagement::Serialization do
120
120
  storage_account_name: 'storageaccountname',
121
121
  cloud_service_name: 'cloud-service-name',
122
122
  tcp_endpoints: '80,3389:3390,85:85',
123
- availability_set_name: 'aval-set'
123
+ availability_set_name: 'aval-set',
124
+ winrm_https_port: '5988',
125
+ winrm_transport: ['http','https']
124
126
  }
125
127
  end
126
128
 
127
129
  it 'returns an VirtualMachine object with correct tcp endpoints' do
128
130
  params[:certificate] = {fingerprint: 'CFB8C256D2986559C630547F2D0'}
131
+ options[:os_type] = 'Windows'
132
+ options[:existing_ports] = ['5985']
129
133
  result = subject.deployment_to_xml params, options
130
134
  doc = Nokogiri::XML(result)
131
135
  endpoints = doc.css('Deployment RoleList ConfigurationSet InputEndpoints InputEndpoint')
@@ -154,28 +158,37 @@ describe Azure::VirtualMachineManagement::Serialization do
154
158
  public_port: '85',
155
159
  local_port: '85'
156
160
  )
161
+ tcp_endpoints.must_include(
162
+ name: 'PowerShell',
163
+ public_port: '5988',
164
+ local_port: '5986'
165
+ )
157
166
  end
158
167
  end
159
168
 
160
169
  describe '#add_data_disk_to_xml' do
161
170
 
162
171
  let(:options) do
163
- {disk_size: 100}
172
+ {
173
+ disk_size: 100,
174
+ }
164
175
  end
165
176
  let(:media_link) { 'https://sta.blob.managment.core.net/vhds/1234.vhd' }
166
- let(:lun) { 5 }
177
+
167
178
  before do
168
179
  Loggerx.expects(:puts).returns(nil).at_least(0)
180
+ @vm = Azure::VirtualMachineManagement::VirtualMachine.new
181
+ @vm.data_disks = []
182
+ @vm.media_link = media_link
169
183
  end
170
184
 
171
- it 'returns an xml for newly created data disk' do
172
- result = subject.add_data_disk_to_xml(lun, media_link, options)
185
+ it 'returns an xml for newly created data disk' do
186
+ result = subject.add_data_disk_to_xml(@vm, options)
173
187
  doc = Nokogiri::XML(result)
174
188
  disk_size = doc.css('DataVirtualHardDisk LogicalDiskSizeInGB').text
175
189
  media_link = doc.css('DataVirtualHardDisk MediaLink').text
176
190
  disk_name = doc.css('DataVirtualHardDisk DiskName').text
177
191
  result.must_be_kind_of String
178
- doc.css('DataVirtualHardDisk Lun').text.must_equal lun.to_s
179
192
  disk_size.must_equal options[:disk_size].to_s
180
193
  media_link.wont_be_empty
181
194
  disk_name.must_be_empty
@@ -184,12 +197,11 @@ describe Azure::VirtualMachineManagement::Serialization do
184
197
  it 'returns an xml for existing data disk' do
185
198
  options[:import] = true
186
199
  options[:disk_name] = 'disk_name'
187
- result = subject.add_data_disk_to_xml(lun, media_link, options)
200
+ result = subject.add_data_disk_to_xml(@vm, options)
188
201
  doc = Nokogiri::XML(result)
189
202
  media_link = doc.css('DataVirtualHardDisk MediaLink').text
190
203
  disk_name = doc.css('DataVirtualHardDisk DiskName').text
191
204
  result.must_be_kind_of String
192
- doc.css('DataVirtualHardDisk Lun').text.must_equal lun.to_s
193
205
  media_link.must_be_empty
194
206
  disk_name.wont_be_empty
195
207
  end
@@ -197,36 +209,36 @@ describe Azure::VirtualMachineManagement::Serialization do
197
209
  it 'raise error when disk name is empty' do
198
210
  options[:import] = true
199
211
  exception = assert_raises(RuntimeError) do
200
- subject.add_data_disk_to_xml(lun, media_link, options)
212
+ subject.add_data_disk_to_xml(@vm, options)
201
213
  end
202
214
  assert_match(/The data disk name is not valid/i, exception.message)
203
215
  end
204
216
  end
205
217
 
206
- describe '#add_data_disk_to_xml' do
218
+ describe '#assign_random_port' do
207
219
  let(:preferred_port) { '22' }
208
220
  before do
209
221
  subject.class.send(:public, *subject.class.private_instance_methods)
210
222
  Loggerx.expects(:puts).returns(nil).at_least(0)
211
223
  end
212
224
 
213
- it 'returns an xml for newly created data disk' do
225
+ it 'returns random port number when preferred port is in use' do
214
226
  result = subject.assign_random_port(preferred_port, [preferred_port])
215
227
  assert_operator result.to_i, :>=, 10000
216
228
  assert_operator result.to_i, :<=, 65535
217
229
  end
218
230
 
219
- it 'returns an xml for newly created data disk' do
231
+ it 'returns preferred port number when used ports is nil' do
220
232
  result = subject.assign_random_port(preferred_port, nil)
221
233
  result.must_equal preferred_port
222
234
  end
223
235
 
224
- it 'returns an xml for newly created data disk' do
236
+ it 'returns preferred port number when used ports is empty' do
225
237
  result = subject.assign_random_port(preferred_port, [])
226
238
  result.must_equal preferred_port
227
239
  end
228
240
 
229
- it 'returns an xml for newly created data disk' do
241
+ it 'returns random port number when preferred port is in use' do
230
242
  result = subject.assign_random_port(preferred_port, ['1', preferred_port])
231
243
  assert_operator result.to_i, :>=, 10000
232
244
  assert_operator result.to_i, :<=, 65535
@@ -21,11 +21,7 @@ describe Azure::VirtualMachineManagementService do
21
21
  Azure::VirtualMachineManagementService.new
22
22
  end
23
23
 
24
- before do
25
- Loggerx.stubs(:info).returns(nil)
26
- end
27
-
28
- let(:params)do
24
+ let(:params) do
29
25
  {
30
26
  vm_name: 'instance1',
31
27
  vm_user: 'root',
@@ -35,7 +31,7 @@ describe Azure::VirtualMachineManagementService do
35
31
  }
36
32
  end
37
33
 
38
- let(:windows_params)do
34
+ let(:windows_params) do
39
35
  {
40
36
  vm_name: 'instance1',
41
37
  vm_user: 'administrator',
@@ -53,56 +49,58 @@ describe Azure::VirtualMachineManagementService do
53
49
  response
54
50
  end
55
51
  let(:location_response_body) { Nokogiri::XML location_response.body }
52
+ let(:mock_virtual_machine_request) { mock }
53
+ let(:windows_images_xml) { Fixtures['list_images'] }
54
+ let(:images_request_path) { '/services/images' }
55
+ let(:mock_request) { mock }
56
+ let(:os_response_body) do
57
+ response = mock
58
+ response.stubs(:body).returns(windows_images_xml)
59
+ Nokogiri::XML response.body
60
+ end
61
+
62
+ before do
63
+ Loggerx.stubs(:info).returns(nil)
64
+ Loggerx.expects(:puts).returns(nil).at_least(0)
65
+ ManagementHttpRequest.stubs(:new).with(
66
+ :get,
67
+ images_request_path,
68
+ nil
69
+ ).returns(mock_request)
70
+ mock_request.expects(:call).returns(os_response_body).at_least(0)
71
+ end
56
72
 
57
73
  describe '#list_virtual_machines' do
58
74
  let(:request_path) { '/services/hostedservices' }
59
75
  let(:cloud_services_xml) { Fixtures['list_cloud_services'] }
60
76
  let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
61
77
  let(:deployment_error_xml) { Fixtures['deployment_error'] }
62
- let(:virtual_networks_xml) { Fixtures['list_virtual_networks'] }
63
-
64
78
  let(:method) { :get }
65
-
66
79
  let(:mock_cloud_service_request) { mock }
67
- let(:mock_virtual_machine_request) { mock }
68
- let(:mock_virtual_network_request) { mock }
69
-
70
80
  let(:cloud_service_response) do
71
81
  cloud_service_response = mock
72
82
  cloud_service_response.stubs(:body).returns(cloud_services_xml)
73
83
  cloud_service_response
74
84
  end
75
-
76
85
  let(:virtual_machine_response) do
77
86
  virtual_machine_response = mock
78
87
  virtual_machine_response.stubs(:body).returns(virtual_machine_xml)
79
88
  virtual_machine_response
80
89
  end
81
-
82
90
  let(:deployment_error_response) do
83
91
  http_error_response = mock
84
92
  http_error_response.stubs(:body).returns(deployment_error_xml)
85
93
  http_error_response
86
94
  end
87
-
88
- let(:virtual_networks_response) do
89
- virtual_networks_response = mock
90
- virtual_networks_response.stubs(:body).returns(virtual_networks_xml)
91
- virtual_networks_response
92
- end
93
-
94
95
  let(:cloud_service_response_body) { Nokogiri::XML cloud_service_response.body }
95
96
  let(:virtual_machine_response_body) { Nokogiri::XML virtual_machine_response.body }
96
- let(:virtual_networks_response_body) { Nokogiri::XML virtual_networks_response.body }
97
97
 
98
98
  before do
99
99
  ManagementHttpRequest.stubs(:new).with(method, request_path, nil).returns(mock_cloud_service_request)
100
100
  mock_cloud_service_request.expects(:call).returns(cloud_service_response_body)
101
- ManagementHttpRequest.stubs(:new).with(method, '/services/hostedservices/cloud-service-1/deploymentslots/production').returns(mock_virtual_machine_request)
101
+ ManagementHttpRequest.stubs(:new).with(method, anything).returns(mock_virtual_machine_request)
102
102
  mock_virtual_machine_request.stubs(:warn=).returns(true).twice
103
- ManagementHttpRequest.stubs(:new).with(method, '/services/hostedservices/cloud-service-2/deploymentslots/production').returns(mock_virtual_machine_request)
104
103
  mock_virtual_machine_request.expects(:call).twice.returns(virtual_machine_response_body).returns(Nokogiri::XML deployment_error_response.body)
105
- ManagementHttpRequest.stubs(:new).with(method, '/services/networking/virtualnetwork', nil).returns(mock_virtual_network_request)
106
104
  end
107
105
 
108
106
  it 'assembles a URI for the request' do
@@ -157,9 +155,9 @@ describe Azure::VirtualMachineManagementService do
157
155
  describe '#get_virtual_machine' do
158
156
 
159
157
  before do
160
- virtual_machine = VirtualMachine.new do |virtual_machine|
161
- virtual_machine.vm_name = 'instance-name'
162
- virtual_machine.cloud_service_name = 'cloud-service-1'
158
+ virtual_machine = VirtualMachine.new do |vm|
159
+ vm.vm_name = 'instance-name'
160
+ vm.cloud_service_name = 'cloud-service-1'
163
161
  end
164
162
  Azure::VirtualMachineManagementService.any_instance.stubs(
165
163
  :list_virtual_machines
@@ -172,38 +170,22 @@ describe Azure::VirtualMachineManagementService do
172
170
  end
173
171
 
174
172
  it 'return nil if virtual machine or cloud server does not exist ' do
175
- virtual_machine = subject.get_virtual_machine 'name', 'cloud-service-1'
176
- virtual_machine.must_equal nil
177
- virtual_machine = subject.get_virtual_machine 'instance-name', 'cloud_service_name'
178
- virtual_machine.must_equal nil
173
+ vm = subject.get_virtual_machine 'name', 'cloud-service-1'
174
+ vm.must_equal nil
175
+ vm = subject.get_virtual_machine 'name2', 'cloud_service_name'
176
+ vm.must_equal nil
179
177
  end
180
178
 
181
179
  it 'return virtual machine instance if virtual machine name and cloud server name are valid ' do
182
- virtual_machine = subject.get_virtual_machine 'instance-name', 'cloud-service-1'
183
- virtual_machine.must_be_kind_of VirtualMachine
180
+ vm = subject.get_virtual_machine 'instance-name', 'cloud-service-1'
181
+ vm.must_be_kind_of VirtualMachine
184
182
  end
185
183
  end
186
184
 
187
185
  describe '#create_virtual_machine' do
188
- let(:images_request_path) { '/services/images' }
189
- let(:images_xml) { Fixtures['list_images'] }
190
- let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
191
186
  let(:method) { :get }
192
- let(:mock_request) { mock }
193
-
194
- let(:os_response_body) do
195
- response = mock
196
- response.stubs(:body).returns(images_xml)
197
- Nokogiri::XML response.body
198
- end
199
187
 
200
188
  before do
201
- ManagementHttpRequest.stubs(:new).with(
202
- method,
203
- images_request_path,
204
- nil
205
- ).returns(mock_request)
206
- mock_request.expects(:call).returns(os_response_body)
207
189
  mock_request = mock
208
190
  ManagementHttpRequest.stubs(:new).with(
209
191
  method,
@@ -257,24 +239,10 @@ describe Azure::VirtualMachineManagementService do
257
239
  end
258
240
 
259
241
  describe '#create_virtual_machine with invalid parameters for windows machine' do
260
- let(:images_request_path) { '/services/images' }
261
- let(:windows_images_xml) { Fixtures['list_images'] }
262
242
  let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
263
243
  let(:method) { :get }
264
- let(:mock_request) { mock }
265
- let(:os_response_body) do
266
- response = mock
267
- response.stubs(:body).returns(windows_images_xml)
268
- Nokogiri::XML response.body
269
- end
270
244
 
271
245
  before do
272
- ManagementHttpRequest.stubs(:new).with(
273
- method,
274
- images_request_path,
275
- nil
276
- ).returns(mock_request)
277
- mock_request.expects(:call).returns(os_response_body)
278
246
  mock_request = mock
279
247
  ManagementHttpRequest.stubs(:new).with(
280
248
  method,
@@ -285,7 +253,6 @@ describe Azure::VirtualMachineManagementService do
285
253
  Azure::CloudServiceManagementService.any_instance.stubs(:create_cloud_service)
286
254
  Azure::CloudServiceManagementService.any_instance.stubs(:upload_certificate)
287
255
  Azure::StorageManagementService.any_instance.stubs(:create_storage_account)
288
- Loggerx.expects(:puts).returns(nil).at_least(0)
289
256
  mock_request = mock
290
257
  ManagementHttpRequest.expects(:new).with(
291
258
  :post,
@@ -403,19 +370,9 @@ describe Azure::VirtualMachineManagementService do
403
370
  end
404
371
 
405
372
  describe '#get_os_type' do
406
- let(:images_xml) { Fixtures['list_images'] }
407
- let(:mock_request) { mock }
408
- let(:response) do
409
- response = mock
410
- response.stubs(:body).returns(images_xml)
411
- response
412
- end
413
- let(:response_body) { Nokogiri::XML response.body }
414
373
 
415
374
  before do
416
- ManagementHttpRequest.any_instance.expects(:call).returns response_body
417
375
  subject.class.send(:public, *subject.class.private_instance_methods)
418
- Loggerx.expects(:puts).returns(nil).at_least(0)
419
376
  end
420
377
 
421
378
  it 'returns os type of given virtual machine image' do
@@ -432,4 +389,52 @@ describe Azure::VirtualMachineManagementService do
432
389
  end
433
390
  end
434
391
 
392
+ describe '#add_role' do
393
+
394
+ before do
395
+ windows_params[:cloud_service_name] = 'cloud-service-1'
396
+ end
397
+
398
+ it 'should throws error when cloud service name is empty' do
399
+ windows_params.delete(:cloud_service_name)
400
+ exception = assert_raises(RuntimeError) do
401
+ subject.add_role(params)
402
+ end
403
+ error_msg = 'You did not provide a valid \'cloud_service_name\' value'
404
+ assert_match(/#{error_msg}/i, exception.message)
405
+ end
406
+
407
+ it 'throws error when vm_user is not given' do
408
+ windows_params.delete(:vm_user)
409
+ exception = assert_raises(RuntimeError) do
410
+ subject.add_role(windows_params)
411
+ end
412
+ error_msg = 'You did not provide a valid \'vm_user\' value'
413
+ assert_match(/#{error_msg}/i, exception.message)
414
+ end
415
+
416
+ it 'throws error when certificate path is not invalid.' do
417
+ options = {
418
+ winrm_transport: %w(https http),
419
+ private_key_file: 'f:/invalid_path/private_key' ,
420
+ certificate_file: 'f:/invalid_path/certificate.pem'
421
+ }
422
+ exception = assert_raises(RuntimeError) do
423
+ subject.add_role(windows_params, options)
424
+ end
425
+ error_msg = 'No such file or directory -'
426
+ assert_match(/#{error_msg}/i, exception.message)
427
+ end
428
+
429
+ it 'throws error when wrong role size is given' do
430
+ options = { vm_size: 'wrong size' }
431
+ exception = assert_raises(RuntimeError) do
432
+ subject.add_role(windows_params, options)
433
+ end
434
+ error_msg = "wrong size' specified for parameter 'vm_size' is invalid."
435
+ assert_match(/#{error_msg}*/, exception.message)
436
+ end
437
+
438
+ end
439
+
435
440
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Microsoft Corporation
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-29 00:00:00.000000000 Z
12
+ date: 2014-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -333,6 +333,8 @@ files:
333
333
  - test/integration/blob/lease/release_lease_test.rb
334
334
  - test/integration/blob/lease/renew_lease_test.rb
335
335
  - test/integration/blob/list_blobs_test.rb
336
+ - test/integration/cloud_service/Cloud_Create_test.rb
337
+ - test/integration/cloud_service/Cloud_Delete_test.rb
336
338
  - test/integration/database/create_sql_server_firewall_test.rb
337
339
  - test/integration/database/create_sql_server_test.rb
338
340
  - test/integration/database/delete_sql_server_firewall_test.rb